0

トランプのパックの場合:

パックを作成するときにスーツ ハッシュ (下記) を使用するにはどうすればよいですか?

私は持っている:

class PackOfCards

  SUITS={H: 'Hearts', S:'Spades', D:'Diamonds', C:'Clubs'}
  CARDS=['A','2','3','4','5','6','7','8','9','10','J','Q','K']


  attr_accessor :pack_name, :cards

  def initialize(pack_name)

    @pack_name= pack_name
    @cards = []
    (0..3).each do |suit|
      (0..12).each do |number|
        @cards << PlayingCard.new(self, (SUITS[suit].value), CARDS[number])
      end 
    end 
  end 
end

class PlayingCard

  attr_accessor :pack, :card_number, :card_suit


  def initialize(pack, suit, number)
    @card_suit = suit
    @card_number = number
  end 

end

しかし、私は得る:

pack_of_cards.rb:16:in `block (2 levels) in initialize': 
undefined method `value' for 
{:H=>"Hearts", :S=>"Spades", :D=>"Diamonds", :C=>"Clubs"}:Hash (NoMethodError)
4

4 に答える 4

2

あなたのSUITS表現は無効です。おそらくあなたはこれをしたいと思っていました:

SUITS = %w[Hearts Spades Diamonds Clubs]

そして、あなたが何をしているのかは明らかではありませんが、おそらくこれを行うべきです:

@cards =
SUITS.flat_map{|suit| CARDS.map{|number| PlayingCard.new(self, suit, number)}}
于 2013-03-17T17:01:30.303 に答える
1

ここに修正版があります。コメントを確認してください。

class PackOfCards
  SUITS={H: 'Hearts', S:'Spades', D:'Diamonds', C:'Clubs'} # Use curly braces to define a hash, [] braces will define an array containing one hash
  CARDS=['A','2','3','4','5','6','7','8','9','10','J','Q','K']
  attr_accessor :pack_name, :cards

  def initialize(pack_name)
    @pack_name= pack_name
    @cards = []
    SUITS.each_key do |suit| # each_key is better since it gives you the key of the hash
      (0..12).each do |number|
        puts PackOfCards::SUITS[suit]
        @cards << PlayingCard.new(self, (PackOfCards::SUITS[suit]), PackOfCards::CARDS[number]) # Call the hash with the right key to get the Suit
      end
    end
  end
end

class PlayingCard 
  attr_accessor :pack, :card_number, :card_suit

  def initialize(pack, suit, number)
    @card_suit = suit
    @card_number = number
  end

end
于 2013-03-17T17:04:32.240 に答える
0

定義Suitとルックアップが有効ではないようです。

このようなものはどうですか(出力がすべてのスーツと数字のカードのパックであると仮定します)-

class PackOfCards

  SUITS = ['Hearts', 'Spades', 'Diamonds', 'Clubs']
  CARDS=['A','2','3','4','5','6','7','8','9','10','J','Q','K']


  attr_accessor :pack_name, :cards

  def initialize(pack_name)

    @pack_name= pack_name
    @cards = []
    (0..3).each do |suit|
      (0..12).each do |number|
        @cards << PlayingCard.new(self, (SUITS[suit]), CARDS[number])
      end 
    end 
  end 
end

class PlayingCard

  attr_accessor :pack, :card_number, :card_suit


  def initialize(pack, suit, number)
    @card_suit = suit
    @card_number = number
  end 

end
于 2013-03-17T17:01:41.810 に答える
0

実際にハッシュを配列に入れました。キーと値のペアにアクセスするには、最初に次のように配列要素にアクセスする必要があります。

SUITS.first[:H]
于 2013-03-17T17:03:15.273 に答える