【问题标题】:How to assign variable's value to a constant?如何将变量的值分配给常量?
【发布时间】:2012-06-02 05:41:45
【问题描述】:

编写诸如CONST = some_var 之类的赋值将引发SyntaxError,因为ruby 中的常量无法重新赋值。

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

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

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

【问题讨论】:

    标签: ruby variables constants


    【解决方案1】:

    Ruby 常量应该保持相同的值,它是 recommendation,不是必须的:

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

    【讨论】:

      【解决方案2】:

      使用带有 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 2021-03-10
        • 2021-09-17
        • 1970-01-01
        • 2021-03-10
        • 2017-08-12
        相关资源
        最近更新 更多