Global array of hashes

I’m doing this:

$globvar=Array.new()
$globvar[0]=“mygenericvalue”
localvar=$globvar
localvar[0]=“mylocalvalue”
puts $globvar

And the result for $globvar is “mylocalvalue”

How can I assign to localvar only the value of $globvar and not the
memory possition??

Thanks

On Thu, Apr 10, 2008 at 6:45 AM, Mario R. [email protected] wrote:

How can I assign to localvar only the value of $globvar and not the
memory possition??

Thanks

This seems to work…

localvar = $globvar.dup

Todd

But not in this case:

$globvar=Array.new()
myHash=Hash.new()
myHash[“oneValue”]=“mygenericvalue”
$globvar[0]=myHash

localvar=$globvar.dup

localvar[0][“oneValue”]=“mylocalvalue”

puts $globvar

On Thu, Apr 10, 2008 at 6:57 AM, Mario R. [email protected] wrote:

puts $globvar

In this case, you create a new array that holds the same Hash object.
You have to dup the Hash as well.

hth,
Todd

Hi –

On Thu, 10 Apr 2008, Mario R. wrote:

puts $globvar

Try this:

irb(main):001:0> a = []
=> []
irb(main):002:0> h = {}
=> {}
irb(main):003:0> h[“one”] = “generic”
=> “generic”
irb(main):004:0> a[0] = h
=> {“one”=>“generic”}
irb(main):005:0> l = Marshal.load(Marshal.dump(a))
=> [{“one”=>“generic”}]
irb(main):006:0> l[0][“one”] = “local”
=> “local”
irb(main):007:0> a
=> [{“one”=>“generic”}]

(using globals if you absolutely must… but that’s another story :slight_smile:

David

Ok.

I was thinking that maybe it could be an easier way…

Thank you.

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