省略“自我”与访问者

时间:2013-01-30 10:42:52

标签: ruby self accessor

通过访问方法attribute访问实例变量时,表达式self.attributeattribute之间有什么区别?比如说,我们定义了一个访问者:

def post
  @post
end

我们可以致电

self.post

或只是

post

添加self有什么特别之处?

1 个答案:

答案 0 :(得分:3)

当阴影方法调用可能存在局部变量时,它会有所不同。使用self允许我们指定我们想要的方法,而不是本地var。查看示例:

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