Global Array?

S

Sy Ys

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

Trans

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.
 
H

highlyjhi

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?

Are you putting a dollar sign ($) in front of the variable's name?

ex: $global_array
 
D

Dan Zwell

Sy said:
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
 
R

Robert Klemme

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
 
P

Paul Stickney

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,260
Messages
2,571,301
Members
47,944
Latest member
LillianPra

Latest Threads

Top