Loser question

Ok. I'm a loser. I've been told and warned. But I still got bit.

Man, you're too hard on yourself!

If I do:

irb(main):001:0> GOLF = [ 1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> g = GOLF
=> [1, 2, 3]
irb(main):003:0> g << 4
=> [1, 2, 3, 4]
irb(main):004:0> g
=> [1, 2, 3, 4]
irb(main):005:0> h = GOLF
=> [1, 2, 3, 4]

Notice that h is [ 1, 2, 3, 4 ] and GOLF has changed its value.

I understand why. Thats not my question.

My question is what or how do most ruby people do this?

Do you simply do this:

irb(main):001:0> GOLF = [ 1, 2, 3 ]
=> [1, 2, 3]
irb(main):002:0> g = GOLF.dup
=> [1, 2, 3]
irb(main):003:0> g << 4
=> [1, 2, 3, 4]
irb(main):004:0> h = GOLF
=> [1, 2, 3]

Or, do you usually hide GOLF inside a method -- which does the dup. How
is this handled most of the time?

If you want GOLF to be immutable, you can freeze it:

$ irb --simple-prompt

GOLF = [ 1, 2, 3 ]

=> [1, 2, 3]

GOLF.freeze

=> [1, 2, 3]

h = GOLF

=> [1, 2, 3]

h << 4

TypeError: can't modify frozen array
        from (irb):4:in `<<'
        from (irb):4