将自我存储到常数中的效果

时间:2013-11-17 11:41:41

标签: ruby

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会产生什么影响?提前谢谢。

1 个答案:

答案 0 :(得分:1)

实例方法中的关键字self是对当前对象的引用。所以你要将正在初始化的对象添加到对象本身的EMP数组中 - 这个事情真的没有意义!。Employee。< / p>

您可能希望将对象添加到类变量中,可以通过以下方式定义:

class Employee
 @@EMP = []

 def initialize(name)
  @name = name
  @hobbies = []
  @friends = []
  @@EMP << self
 end
end

因此,每次初始化一个新对象时,它都会被添加到类本身的@@EMP数组中。