创建一大堆新对象

时间:2013-11-05 15:23:31

标签: ruby class object

编程很新。我正在尝试使用我定义的新类在ruby中创建一堆新对象。例如,这是我的班级:

class Loser

  def initialize (fingers)
    @fingers = fingers
  end

  def fingerprint
    return @fingers
  end
end

所以我想说我想让10个输家。第一个失败者有1个手指,第二个失败者有2个手指......等等。

而不是通过

loser1 = Loser.new(1)
loser2 = Loser.new(2)
etc,

我以为我可以做点什么

array = [1,2,3,4,5,6,7,8,9,10]
array.each {|i| loser#{i} = Loser.new(i)}

我想要

puts Loser5.fingerprint 

输出5完全不起作用。请给我任何建议。这可能非常简单。我是新人。

4 个答案:

答案 0 :(得分:2)

试试这个:

losers = [];
1.upto(10) do |i|
  losers << Loser.new(i)
end

编辑(信用@meager)如果你想缩短它:

losers = 1.upto(10).map {|i| Loser.new(i)}

答案 1 :(得分:2)

class Loser
  def initialize (fingers)
    @fingers = fingers
  end

  def fingerprint
    return @fingers
  end
end

losers = (1..10).map { |n| Loser.new(n) }
losers[4].fingerprint # => 5

答案 2 :(得分:1)

这是怎么回事?

class Loser
  def initialize (fingers)
    @fingers = fingers
  end

  def fingerprint
    return @fingers
  end
end

losers = 1.upto(10).map(&Loser.method(:new))
p losers[4].fingerprint # => 5

答案 3 :(得分:0)

这是非常基础的,你可以做很多事情来使这更复杂,但我会给你一个简单的例子。您可以将常量设置为跟踪类Loser实例的数组。例如:

class Loser 

LOSERS = []

  def initialize(fingers)
    @fingers = fingers
    LOSERS << self
  end

  def fingerprint
    LOSERS.count
  end
end

但是,这完全取决于LOSERS数组中的实例数。