Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 创建一大堆新对象_Ruby_Class_Object - Fatal编程技术网

Ruby 创建一大堆新对象

Ruby 创建一大堆新对象,ruby,class,object,Ruby,Class,Object,对编程非常陌生。我试图用我定义的新类在ruby中创建一堆新对象。例如,我的课堂: class Loser def initialize (fingers) @fingers = fingers end def fingerprint return @fingers end end 让我们假设我想让10个输家。第一个失败者有一个手指,第二个失败者有两个手指。。。等等 而不是经历 loser1 = Loser.new(1) loser2 = Loser.new(

对编程非常陌生。我试图用我定义的新类在ruby中创建一堆新对象。例如,我的课堂:

class Loser

  def initialize (fingers)
    @fingers = fingers
  end

  def fingerprint
    return @fingers
  end
end
让我们假设我想让10个输家。第一个失败者有一个手指,第二个失败者有两个手指。。。等等

而不是经历

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,这完全不起作用。有什么建议吗。这可能很简单。我是新来的。

试试这个:

losers = [];
1.upto(10) do |i|
  losers << Loser.new(i)
end
这是怎么回事

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

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

class Loser 

LOSERS = []

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

  def fingerprint
    LOSERS.count
  end
end

但是,这完全取决于失败者数组中实例的数量。

将失败者存储在一个数组中。当map可用时,基本上不应该使用这种模式:LOSERS=1.upto10.map{| i | Loser.newi}。@meagar:我忘了你可以在枚举器上使用map。谢谢漂亮,红润,优雅。对Ruby新手来说,理解起来有点困难,但无论如何+1。为什么要使用明显更神秘的&Lower。方法:new而不是{i | Lower.newi}?@meagar:它看起来很聪明,不会重复你的评论:
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
class Loser 

LOSERS = []

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

  def fingerprint
    LOSERS.count
  end
end