B
Ben Giddings
Although Ruby allows the use of global variables, I still prefer not to
use them. I am wary that someone else might have chosen the same
variable name as me, and besides, they just don't feel properly OO.
Singletons seem like the best solution to this problem, but I'm
concerned about garbage collection.
Say I have two classes that each do a lot of work. I instantiate one,
do a bunch of calculations and return a result. I then instantiate a
second class and do a bunch more work on that result. Say both classes
want to use this global / singleton, and want to make sure that it
doesn't get garbage collected between calls, what's the best way to do
this?
Example code:
class Stats
include Singleton
def initialize
@count = 0
end
def sawAnother
@count += 1
end
end
class Worker1
def doStuff
@stats = Stats.instance
...
end
end
class Worker2
def doOtherStuff
@stats = Stats.instance
...
end
def showResult
@stats.dumpStats
end
end
w1 = Worker1.new
w1.doStuff
w2 = Worker2.new
w2.doStuff
w2.showResult
What I want to avoid is having the Stats singleton get garbage
collected between calls to w1.doStuff and the creation of Worker2.new.
Any comments?
Ben
use them. I am wary that someone else might have chosen the same
variable name as me, and besides, they just don't feel properly OO.
Singletons seem like the best solution to this problem, but I'm
concerned about garbage collection.
Say I have two classes that each do a lot of work. I instantiate one,
do a bunch of calculations and return a result. I then instantiate a
second class and do a bunch more work on that result. Say both classes
want to use this global / singleton, and want to make sure that it
doesn't get garbage collected between calls, what's the best way to do
this?
Example code:
class Stats
include Singleton
def initialize
@count = 0
end
def sawAnother
@count += 1
end
end
class Worker1
def doStuff
@stats = Stats.instance
...
end
end
class Worker2
def doOtherStuff
@stats = Stats.instance
...
end
def showResult
@stats.dumpStats
end
end
w1 = Worker1.new
w1.doStuff
w2 = Worker2.new
w2.doStuff
w2.showResult
What I want to avoid is having the Stats singleton get garbage
collected between calls to w1.doStuff and the creation of Worker2.new.
Any comments?
Ben