在 codeschool 的一节课中,左上角的代码被证明是不正确的。
“当然是”,我对自己说。我知道它应该是@name = name。新问题是什么?为什么这里需要“自我”?请参阅下面的工作代码:

class UserList
attr_accessor :name
def initialize(name)
@name = name
end
end
list = UserList.new('celebrities')
list.name
在 codeschool 的一节课中,左上角的代码被证明是不正确的。
“当然是”,我对自己说。我知道它应该是@name = name。新问题是什么?为什么这里需要“自我”?请参阅下面的工作代码:

class UserList
attr_accessor :name
def initialize(name)
@name = name
end
end
list = UserList.new('celebrities')
list.name
self这里没有必要。你在做什么是等价的。无论哪种方式都很好。
self.name =调用name=设置实例变量的方法@name。你在做什么是等价的。
Codeschool 在attr_accessor这里介绍。你是对的
@name = name
self.name = name
是等价的。
但一方面为什么选择attr_accessor(而不是attr_reader)然后写@name=?学习的一部分是attr_accessor创建一个 setter 方法。使用attr_accessorwith@name=有点没用。
另一方面,他们想指出另一个重要的细节:即使attr_accessor创建了一个方法def name=(name),这些都不会起作用:
name = name
name = 'Bart'
因为它永远不会改变底层@name变量,甚至不会触及使用attr_accessor. 它会改变局部变量name。
这是一个重要的学习。name=知道和之间的区别self.name=。