【问题标题】:I (think) I'm getting objects returned when I expect my array to have just 2 properties available我(认为)当我希望我的数组只有 2 个可用属性时,我正在返回对象
【发布时间】: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 我同意这个模块。我用它只是为了在这里为自己强化这个概念。我意识到这违反了模块的目的,因为它对使用它的每个其他类都是个性化的。您还看到其他样式类型问题吗?这不是讽刺,我非常希望大家有任何意见,因为我基本上是在自学这些原则。谢谢大家!

标签: ruby oop blackjack


【解决方案1】:

在 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

【讨论】:

  • 哇......谢谢肖恩!我什至查看了文档并没有注意到返回的不同类型,甚至没有考虑它。这是一个很大的帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
相关资源
最近更新 更多