1

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

def post
  @post
end

我们可以打电话

self.post

或者干脆

post

添加有什么特别之处self

4

1 回答 1

3

当可能存在隐藏方法调用的本地 var 时,情况会有所不同。Usingself允许我们指定我们想要的方法,而不是本地 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
于 2013-01-30T10:45:21.830 回答