0

在 codeschool 的一节课中,左上角的代码被证明是不正确的。

“当然是”,我对自己说。我知道它应该是@name = name。新问题是什么?为什么这里需要“自我”?请参阅下面的工作代码:

在此处输入图像描述

class UserList
    attr_accessor :name
    def initialize(name)
        @name = name
    end
end

list = UserList.new('celebrities')
list.name
4

3 回答 3

1

self这里没有必要。你在做什么是等价的。无论哪种方式都很好。

于 2013-10-09T00:53:56.613 回答
0

self.name =调用name=设置实例变量的方法@name。你在做什么是等价的。

于 2013-10-09T00:55:19.853 回答
0

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=

于 2013-10-09T06:54:41.557 回答