Ruby:有人可以详细说明这段代码吗?

时间:2011-07-25 10:56:18

标签: ruby

  

可能重复:
  What does ||= mean in Ruby?

  class Person
    attr_accessor :name

    class << self
      attr_accessor :instances

      def instances
        @instances ||= []
        @instances
      end
    end

    def initialize( name )
      Person.instances << self
      @name = name
    end

  end

  joe = Person.new( "Joe" )
  zach = Person.new( "Zach" )

  puts "You have #{Person.instances.size} people in existance!" POINT C

  class Paramedic < Person

    def initialize( name )
      super( name )
      Paramedic.instances << self
    end
 end

  sally = Paramedic.new( "Sally" )
  puts "You have #{Person.instances.size} people in existance!" #POINT B
  puts "You have #{Paramedic.instances.size} paramedics in existance!" POINT C

这些线做了什么?

@instances ||= []
Person.instances << self
Paramedic.instances << self

2 个答案:

答案 0 :(得分:2)

有班级变量@instances

第一行

@instances ||= []

如果@instances为零,则使用空数组初始化此变量。

然后在初始化类的实例时,Person代码Person.instances << self将此实例添加到Person类的所有实例的数组中。

因此,如果您致电Person.instances,您将提供所有类别的实例。

与护理人员的情况相同。

答案 1 :(得分:0)

此代码基本上跟踪PersonParamedic的实例。每次构造其中一个时,创建的对象将添加到类变量instances表示的列表中。在这种情况下,self指的是实例本身。

@instances ||= []是一个Ruby惯用语,是@instances = @instances || []的缩写。因为在Ruby中只有falsenil评估为false,所以如果@instances尚不存在,则代码段会返回@instances或空列表。