6

My googlefu sucks and was unable to find information on this.

Basically I want to have a instance variable that is visible only within the scope of a class/module but is also immutable.

I am new to Ruby and apologize if this question doesn't make much sense.

PolandSpring
  • 2,584
  • 6
  • 23
  • 35

3 Answers3

3
class MyClass
  def initialize
    class << self
      FOO=1
    end
  end
  def foo
    class << self
      FOO
    end
  end
end

Naturally, you'll want to use the method foo wherever possible to read the value.

A simpler equivalent would be

class MyClass
  def initialize
    def foo; 1; end
  end
end
Ken Bloom
  • 55,158
  • 13
  • 108
  • 167
1

Ruby constants aren't very constant: they're not immutable, and you can assign another value to them and all you get is a warning. See the question Constant Assigment Bug in Ruby?

Community
  • 1
  • 1
Andrew Grimm
  • 74,534
  • 52
  • 194
  • 322
0

I wrote a gem for this case. http://rubygems.org/gems/instancevalue

(The approaching as Ken's one.)

kachick
  • 373
  • 2
  • 7