0

関係を管理するRailsフレームワークに慣れているRailsから来ました。

今は基本的なRubyをやろうとしています。

関係と構成を理解しようとしています。例として、Pack of Cards を使用します。今のところ、1 から 52 までの card_number を使用します (今のところ、スーツと実数は無視します)。

以下のコードは PackOfCards を作成できますが、必要な 5 枚のカードを作成していません。何も表示されないか、最後のプットに nil が返されます。

class PackOfCards

  attr_accessor :pack_name, :cards

  def initialize(pack_name)

    @pack_name= pack_name
    cards = []
    5.times do
      cards << PlayingCard.new(self)
    end 
  end 

end

class PlayingCard

  attr_accessor :pack, :card_number

  def initialize(pack)
    @card_number = rand(52)
    @pack = pack
  end 

end

my_pack=PackOfCards.new('bobs')
puts my_pack.pack_name
puts my_pack.cards # Nothing
my_pack.cards.each do |one_card|
  puts one_card.card_number # Undefined method 'each' for nil
end

カードのパックを作成して 5 枚のカードを表示するにはどうすればよいですか?

4

2 に答える 2

1

cardsアクセサはあなたのためにとcards=メソッドを作成するだけだと思います。私はそれがうまくいくとは思わない<<。次のように変更してみてください:

@cards = []
5.times do
  @cards << PlayingCard.new(self)
end 
于 2013-03-17T15:43:57.353 に答える
0

実際、問題は、作成した意図しないローカル変数にあります。

あなたが言った場合:

x = カード

次のようになります。

x = self.cards

ただし、代入時に self を使用しないと、実際にはローカル変数 'c​​ards' を作成します

self.cards = []

カード << フー

メソッドの使用は ruby​​ に従って最初に自分自身を検索するため、問題なく動作しますが、ruby のローカル変数はメソッド呼び出しと同じように見えるため、割り当て時に ruby​​ がそれらを作成できます。

于 2013-03-17T16:52:55.773 に答える