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,664
  • 7
  • 26
  • 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
  • 57,498
  • 14
  • 111
  • 168
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
  • 78,473
  • 57
  • 200
  • 338
0

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

(The approaching as Ken's one.)

kachick
  • 371
  • 2
  • 7