0

我有一个以前在这里问过的问题:我(认为)当我希望我的数组只有 2 个可用 的属性可能会提供一些背景时,我正在返回对象。收到解决方案后,我立即开始向每个玩家展示手牌。下面的模块包含在 Dealer 和 Player 类中。

module Hand
   def show_hand
      if self.class == Dealer
         #Need to cover up 1 of the 2 cards here. Dealer doesn't show both!
         print "The dealer is showing: "
         print self.hand[0].show_card
         puts ''
      elsif self.class == Player
         print "You have: "
         self.hand.each do |item|
            item.show_card
         end
         puts ''
      else
         puts "A Random person is showing their hand."
      end
   end
end

我知道这种定制违背了模块的目的,只是用它来强化模块的概念。上述解决方案适用于经销商部分。但是当调用 Player 部分时,它会打印一个空白块。在对 Player 块中的每个“项目”进行 .inspect 时,它确认这些项目实际上是预期的 Card 对象。这是之前的 show_card 方法:

def show_card
    "[#{@card_type} of #{@suit}]"
end

所以它只返回了一个带有 card_type 和花色的字符串。只需将方法更改为此,我就可以解决 Player 对象部分的问题:

def show_card
    print "[#{@card_type} of #{@suit}]"
end

为什么会这样?我假设它与玩家手上的“每个”的调用有关。真的只是好奇有什么区别以及为什么这些 Card 对象不会在没有明确的“打印”的情况下打印出来,副通过 String 对象返回。

希望我的描述性足够。这让我感到困惑,我真的很想抓住这些小东西,因为我知道它会防止未来出现这样的错误。谢谢!

4

1 回答 1

1

在 Ruby 中,您必须使用putsor进行打印print。仅返回字符串不会打印它。您的 Dealer 课程打印的原因是因为您做了 a print,但Player正如您所指出的,在您的课程中,您没有打印。您只返回了字符串而不打印。

正如您所指出的,您可以通过包含打印来修复它:

def show_card
  print "[#{@card_type} of #{@suit}]"
end

你可以这样做:

def show_card
  "[#{@card_type} of #{@suit}]"
end

...

module Hand
  def show_hand
    if self.class == Dealer
      #Need to cover up 1 of the 2 cards here. Dealer doesn't show both!
      print "The dealer is showing: "
      puts self.hand[0].show_card   # PRINT THE CARD
    elsif self.class == Player
      print "You have: "
      self.hand.each do |item|
        print item.show_card  # PRINT THE CARD
      end
      puts ''
    else
      puts "A Random person is showing their hand."
    end
  end
end

这将更加“对称”并打印您想要的内容。

稍微紧凑一点的是:

def show_card
  "[#{@card_type} of #{@suit}]"
end

...

module Hand
  def show_hand
    if self.class == Dealer
      #Need to cover up 1 of the 2 cards here. Dealer doesn't show both!
      puts "The dealer is showing: #{self.hand[0].show_card}"
    elsif self.class == Player
      print "You have: "
      self.hand.each { |item| print item.show_card }
      puts ''
    else
      puts "A Random person is showing their hand."
    end
  end
end
于 2013-07-17T20:19:31.553 回答