如何将变量的值赋给常量?

时间:2012-06-02 05:41:46

标签: ruby variables constants

编写CONST = some_var之类的作业会引发SyntaxError因为ruby中的Constant无法重新分配。

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

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

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

2 个答案:

答案 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