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?
On May 25, 11:11 pm, Sy Ys [email protected] 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?
Have some code?
Try:
$a = []
T.
On May 25, 2007, at 11:11 PM, Sy Ys wrote:
Are you putting a dollar sign ($) in front of the variable’s name?
ex: $global_array
On 26.05.2007 05:32, Dan Z. wrote:
global_variables.include?("$klasses") and $klasses.is_a?(Array)
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
Went with this. Thanks
Dan Z. wrote:
Might I suggest using a class level variable
instead (@@klasses)? It seems appropriate. They are “almost global.”
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.”
Dan
If it’s a class calling itself, vs. an object (instance of the class)
calling itself, why not use instance variables of the class? Or …
need more input on the exact problem.
“Global variables” and recursion sound like a bad idea in general
(could you not just pass the object through each recursive call?)