Robert Klemme
5/26/2007 8:02:00 AM
On 26.05.2007 05:32, Dan Zwell wrote:
> Sy Ys wrote:
>> I've got a class which calls itself several times (recursive). While
>> this class is calling itself, I want it to be appending a global array (
>> << ). I can't figure out how to make the array itself global, so for now
>> each time the class calls itself, it creates the array anew again. Help?
>>
>
> class Klass
> def recurse
> $klasses = Array.new unless > global_variables.include?("$klasses") and $klasses.is_a?(Array)
> unless $klasses.size > 40
> k = Klass.new
> $klasses << k
> k.recurse
> end
> end
> end
>
> Note that I found the "and $klasses.is_a?(Array)" bit necessary because
> the parser seems to initialize the global array $klasses when it first
> comes across the word. Might I suggest using a class level variable
> instead (@@klasses)? It seems appropriate. They are "almost global."
No, rather use a class instance variable. But even that has problems
because it is not thread safe.
The solution really depends on the problem to solve. Maybe it's a
global variable, maybe it's a thread local, maybe it's a parameter like in
def foo(x=[])
if ...
# recursion
foo(x)
else
# termination
end
end
.... or maybe it's even another class with an instance variable, i.e.
factor out the recursive functionality into another class.
It all depends...
robert