【问题标题】:Trying to move cards into player hand试图将牌移到玩家手中
【发布时间】:2017-08-07 19:39:18
【问题描述】:

我创建了套牌,洗牌,现在尝试将 7 张牌发到 4 位玩家手中。

得到以下错误:

irb(main):097:0*      deck.each do
irb(main):098:1*       Player.@hand << deck.pop()
irb(main):099:1>     end
SyntaxError: (irb):98: syntax error, unexpected tIVAR, expecting '('
      Player.@hand << deck.pop()
              ^

使用此代码:

class Player 
  attr_accessor :hand 

  def initialize(hand) 
    @hand = hand 
  end 
end

【问题讨论】:

  • 可以添加 Player 类吗?
  • 您不应该使用.@hand 来访问类变量。见我上面的链接
  • @Royal 您需要某种形式的函数来操作类变量。大卫的回答就足够了。

标签: ruby loops variables methods block


【解决方案1】:

我会在 Player 上定义一个方法来接受一张新牌,并将其添加到他们的手牌中。

比如:

def take_card(card)
  hand << card
end

...导致...

deck.each do
  @player.take_card deck.pop
end

注意@player,我用它来引用Player 类的一个实例。在这里使用 Player 可能不正确。

你可以实现一个操作符..

def <<(card)
  hand << card
end

...然后...

deck.each do
  @player << deck.pop
end

【讨论】:

  • @davidaldrige 像这样:Player.take_card
  • 不需要赋值运算符,但我使用一个发布了更新。
  • 结果如下:irb(main):100:0* deck.each do irb(main):101:1* Player.take_card end NoMethodError: undefined method take_card' for Player:Class from (irb):101:in block in irb_binding' from (irb):100:in each' from (irb):100 from C:/RailsInstaller/Ruby2.3.0/bin/irb.cmd:19:in
    '
  • 你需要初始化一个类的实例...@player = Player.new,然后@player.take_card deck.pop
  • @Royal 请不要在 cmets 中发布代码。这都应该进入你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 2021-01-07
  • 2023-02-25
  • 2013-03-14
  • 2019-08-03
相关资源
最近更新 更多