提出问题可能是最糟糕的方式,但我是新手,并尽力解释我的问题。
我正在实施Ruby Blackjack游戏。你可以看到我在这里的回购/来源:https://bitbucket.org/subem81/blackjack
这是关注的特定部分(保存在“Hand”模块中,使用我认为的mixins包含在Dealer和Player类中):
def show_hand
if self.class.to_s == 'Dealer'
self.hand.each do |card|
card.show_card
end
elsif self.class.to_s == 'Player'
else
puts "A Random person is showing their hand."
end
end
为每个Card对象调用show_card()方法。或者我想。我一直在卡对象上没有方法错误。这是错误:
$ ruby blackjack.rb
Welcome to Mike's Blackjack.
blackjack.rb:35:in `block in show_hand': undefined method `show_card' for
[# <Card:0x007fe504110918 @suit="Spades", @card_type="King">]:Array (NoMethodError)
from blackjack.rb:34:in `each'
from blackjack.rb:34:in `show_hand'
from blackjack.rb:21:in `setup_players'
from blackjack.rb:6:in `initialize'
from blackjack.rb:116:in `new'
from blackjack.rb:116:in `<main>'
答案 0 :(得分:3)
在Deck.give_card中,您将通过带有参数的pop返回cards_sent。这将返回一个数组。因此,经销商和玩家手中将是一系列卡片。 (不带参数的pop返回单个项目。)
从你的错误:
未定义方法`show_card'[#]:数组
您可以更改:
@dealer.hand << @deck.give_card
@player.hand << @deck.give_card
@dealer.hand << @deck.give_card
@player.hand << @deck.give_card
为:
@dealer.hand += @deck.give_card
@player.hand += @deck.give_card
@dealer.hand += @deck.give_card
@player.hand += @deck.give_card
或者将您的give_card重命名为give_cards并添加新的give_card:
def give_card
@cards.pop
end