2

同じクラス内でセッターに簡単にアクセスするにはどうすればよいですか?

私はこの呼び出しを持っているとしましょう:

# some_file.rb , create a new object
temperature = Measurement.new 'temperature', 36.6

そしてモデル:

# Measurements.rb , some model
class Measurement
  attr_accessor :value, :type
  attr_reader :device, :title, :label

  def initialize type, value
    # This one works, but not trigger the setter
    @type = type
    # And this one trigger setter
    self.type = type
  end

  def type= new_type
    # do something very important
  end    
end

これは、クラス内のどこでも名前を変更せずに、この変数でセッターを使用したい場合self.var =の代わりに、常に使用する必要があることを意味しますか? @var =これ以上の違いと、セッターを追加するためのより良い方法はありますか?

4

1 に答える 1

2

はい、あなたはいつもそうします。Rubyにはセッターのようなものはありません。で終わるメソッドです=。ただし、構文があいまいなため、セッターの前にオブジェクトとピリオドを付ける必要があります。そうしないと、Rubyは代わりにローカル変数への代入を認識します。

言い換えれば、それ@blahは生のアクセスであり、メソッドをトリガーすることは決してないことを覚えておいてください(完全に真実ではありません。いくつかのロギングとデバッグのホックメソッドがありますが、気にしないでください)。

だからself.blah=、あなたのセッターがそれほど重要であるなら、ただ一緒に住んでください。

于 2012-12-06T14:47:18.720 に答える