在ruby类的初始化中,@ name或self.name之间有什么区别?

时间:2012-11-04 12:42:57

标签: ruby

我知道使用self.name是有意义的,但@name在以下代码中的含义是什么?

class NewGame < Game
  attr_accessor :name
  def initialize(name, options={})
    super
    self.name = name
  end

  def add_game(name)
     @name = name
  end
end

这甚至合法吗?我犯了错误吗?

1 个答案:

答案 0 :(得分:3)

@name是一个实例变量,可以像类实例的私有成员一样访问。

self.name是对self对象的方法调用,如果未明确定义,则会得到NoM​​ethodError。

我会继续说明你班上的attr_accessor :weight写作是:

def weight=(v)
  @weight = v
end

def weight
  @weight
end