class Employee
EMP = []
attr_reader :name, :hobbies, :friends
def initialize(name)
@name = name
@hobbies = []
@friends = []
EMP << self
end
end
我们可以讨论一下这行发生了什么:EMP << self
?
显然,一个元素被添加到现有数组(称为EMP的数组) - 这就是<<
符号所暗示的内容。
但是,添加的元素是哪个?它只是@name
并且我们知道它只是@name
变量,因为它是initialize
方法中唯一的参数吗?
如果initialize方法有 2 arg :
def initialize(name, hob)
@name = name
@hobbies = hob
@friends = []
EMP << self
end
EMP << self
会产生什么影响?提前谢谢。
答案 0 :(得分:1)
实例方法中的关键字self
是对当前对象的引用。所以你要将正在初始化的对象添加到对象本身的类EMP
数组中 - 这个事情真的没有意义!。Employee
。< / p>
您可能希望将对象添加到类变量中,可以通过以下方式定义:
class Employee
@@EMP = []
def initialize(name)
@name = name
@hobbies = []
@friends = []
@@EMP << self
end
end
因此,每次初始化一个新对象时,它都会被添加到类本身的 @@EMP
数组中。