-1

プログラミング初心者です。定義した新しいクラスを使用して、Ruby で一連の新しいオブジェクトを作成しようとしています。たとえば、ここに私のクラスがあります:

class Loser

  def initialize (fingers)
    @fingers = fingers
  end

  def fingerprint
    return @fingers
  end
end

では、敗者を 10 人作りたいとしましょう。最初の敗者は指が 1 本、2 番目の敗者は指が 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

4 に答える 4

2

これを試して:

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

少し短くしたい場合は編集します(@meagerの功績):

losers = 1.upto(10).map {|i| Loser.new(i)}
于 2013-11-05T15:25:26.783 に答える
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
于 2013-11-05T15:26:16.513 に答える
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
于 2013-11-05T15:28:58.523 に答える
0

これは非常に基本的なものであり、これをより複雑にするために多くのことを行うことができますが、簡単な例を示します。クラス Loser のインスタンスを追跡する配列として定数を設定できます。例えば:

class Loser 

LOSERS = []

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

  def fingerprint
    LOSERS.count
  end
end

ただし、これは LOSERS 配列にあるインスタンスの数に完全に依存します。

于 2013-11-05T15:35:44.230 に答える