Global Array?

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?)

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs