【发布时间】:2013-07-15 09:21:38
【问题描述】:
可能是最糟糕的提问方式,但我是新手,正在尽力解释我的问题。
我正在实现一个 Ruby Blackjack 游戏。您可以在此处查看我所拥有的 repo / 来源:https://bitbucket.org/subem81/blackjack
这是需要关注的特定部分(保留在“手”模块中,使用我认为是 mixin 的 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>'
【问题讨论】:
-
由于您是 Ruby 新手,我只想指出您可以只写
if self.class == Dealer而不是将类转换为字符串。 -
如果你只是要切换它所在的类,那么使用这样的模块是没有意义的。只需在每个类中实现不同的行为。
-
andrew.cuthbert - 感谢您的指点! @AndrewMarshall 我同意这个模块。我用它只是为了在这里为自己强化这个概念。我意识到这违反了模块的目的,因为它对使用它的每个其他类都是个性化的。您还看到其他样式类型问题吗?这不是讽刺,我非常希望大家有任何意见,因为我基本上是在自学这些原则。谢谢大家!