在Ruby中有这样的常量实例变量吗?

时间:2010-08-02 22:52:24

标签: ruby

我的googlefu很糟糕,无法找到相关信息。

基本上我想要一个只在类/模块范围内可见的实例变量,但也是不可变的。

我是Ruby新手并且如果这个问题没有多大意义,请道歉。

3 个答案:

答案 0 :(得分:3)

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

当然,您希望尽可能使用方法foo来读取值。

更简单的等价物是

class MyClass
  def initialize
    def foo; 1; end
  end
end

答案 1 :(得分:1)

Ruby常量不是很常量:它们不是不可变的,你可以为它们分配另一个值,你得到的只是一个警告。请参阅问题Constant Assigment Bug in Ruby?

答案 2 :(得分:0)

我为这个案子写了一个宝石。 http://rubygems.org/gems/instancevalue

(接近Ken的那个。)