1

CONST = some_varruby でwill raise as Constantのような代入を書くSyntaxErrorと再代入できなかった。

しかし、場合によっては、現在の変数のを定数に保持し、そこにロックしたいことがあります。

たとえば、クラスからインスタンスを初期化するときに、渡された値をインスタンス内でロックしたいとします。Rubyで正しい方法で行うにはどうすればよいですか? (以下は、それを実現しようとする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 に答える