为什么这里需要'self'而不是实例变量?

时间:2013-10-09 00:47:24

标签: ruby

在来自codeschool的课程中,左上方块中的代码被证明是错误的。

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

enter image description here

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

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

3 个答案:

答案 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=之间的区别。