在来自codeschool的课程中,左上方块中的代码被证明是错误的。
“当然是”,我对自己说。我已经知道它应该是@name = name
。什么是新问题?为什么这里需要“自我”呢?请参阅下面的工作代码:
class UserList
attr_accessor :name
def initialize(name)
@name = name
end
end
list = UserList.new('celebrities')
list.name
答案 0 :(得分:1)
self
。你在做什么是等价的。无论哪种方式都没问题。
答案 1 :(得分:0)
self.name =
调用设置实例变量name=
的{{1}}方法。你在做什么是等价的。
答案 2 :(得分:0)
Codeschool在这里介绍attr_accessor
。你是对的
@name = name
self.name = name
是等价的。
但一方面为什么选择attr_accessor
(而不是attr_reader
),然后写@name=
?学习的一部分是attr_accessor
创建了一个setter方法。将attr_accessor
与@name=
一起使用是没用的。
另一方面,他们想要指出另一个重要细节:即使attr_accessor
创建了方法def name=(name)
,也不会有这种方法:
name = name
name = 'Bart'
因为它永远不会更改基础@name
变量,甚至不会触及使用attr_accessor
创建的方法。它会改变局部变量name
。
这是一个重要的学习。了解name=
和self.name=
之间的区别。