1

在 ruby​​ 中编写诸如CONST = some_varwill raise SyntaxErroras Constant 之类的作业无法重新分配。

但在某些情况下,我想将当前变量的保存在一个常量中并将其锁定在那里。

例如,当我从一个类初始化一个实例时,我想将传入的值锁定在实例中。我应该如何在红宝石中以正确的方式做到这一点?(以下是 ruby​​ 中的非法代码试图实现它,你明白了)

class SomeClass
  def initialize(status)
    STATUS = status # it is illegal now
  end
end
4

2 回答 2

2

Ruby 常量应该保持相同的值,这是一个建议,而不是必须:

Ruby 常量就像一个变量,只是它的值应该在程序运行期间保持不变。Ruby 解释器实际上并不强制常量的恒定性,但如果程序更改常量的值,它会发出警告。

于 2012-06-02T05:56:13.223 回答
1

使用带有 getter 而没有 setter 的实例变量。像这样:

class SomeClass
  attr_reader :status
  def initialize(status)
    @status = status
  end
end

现在您可以像这样使用您的对象:

>> a = SomeClass.new(5)
=> #<SomeClass:0x108c80218 @status=5>
>> a.status
=> 5
>> a.status=7
NoMethodError: undefined method `status=' for #<SomeClass:0x108c80218 @status=5>
from (irb):9
于 2012-06-03T19:03:31.323 回答