From: Robert Klemme Date: 2007-05-26T17:05:13+09:00 Subject: Re: Global Array? 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