アクセサメソッドを介してインスタンス変数にアクセスする場合、式と?attribute
の違いは何ですか?たとえば、アクセサを定義します。self.attribute
attribute
def post
@post
end
電話できます
self.post
または単に
post
追加の何が特別なのself
ですか?
メソッド呼び出しをシャドウするローカル変数が存在する可能性がある場合、違いが生じます。を使用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