编写CONST = some_var
之类的作业会引发SyntaxError
因为ruby中的Constant无法重新分配。
但在某些情况下,我希望将当前变量的值保存在常量中并将其锁定在那里。
例如,当我从类初始化实例时,我想锁定实例中的传入值。我应该如何在红宝石中以正确的方式做到这一点? (以下是ruby试图实现它的非法代码,你明白了)
class SomeClass
def initialize(status)
STATUS = status # it is illegal now
end
end
答案 0 :(得分:2)
Ruby常量应该保留相同的值,它是recommendation,而不是必须:
Ruby常量就像一个变量,除了它的值应该在程序的持续时间内保持不变。 Ruby解释器实际上并不强制执行常量的常量,但如果程序更改常量的值,它会发出警告。
答案 1 :(得分: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