1

アクセサメソッドを介してインスタンス変数にアクセスする場合、式と?attributeの違いは何ですか?たとえば、アクセサを定義します。self.attributeattribute

def post
  @post
end

電話できます

self.post

または単に

post

追加の何が特別なのselfですか?

4

1 に答える 1

3

メソッド呼び出しをシャドウするローカル変数が存在する可能性がある場合、違いが生じます。を使用selfすると、ローカル変数ではなくメソッドが必要であることを指定できます。例を参照してください。

class Foo
  def post
    @post
  end

  def post= (content)
    @post = content
  end 

  def test
    #difference 1 
    p post # >> nil

    @post = 10
    p post # >> 10

    post = 42
    p post # >> 42
    p self.post # >> 10

    #difference 2
    # assign to @post, note that you can put space between "self.post" and "="
    self.post = 12 

    #otherwise it means assigning to a local variable called post.
    post = 12
  end
end

Foo.new.test
于 2013-01-30T10:45:21.830 に答える