3

我正在通过 Ruby 学习编程,并且我发现了 Railscasts 的 Ryan Bates 写的很棒的 Rubywarrior。不幸的是,我被困在我的代码抛出语法错误消息(意外的 $end)。

我不是在要求答案,我想自己解决这个问题,但如果有人能指出我的代码从哪里得到错误,那就太好了。谢谢!

class Player

  def initialize
    @maxhealth = 20
    @dying = 7
    @previoushealth = @maxhealth
    @health = warrior.health
    @warrior = warrior
  end

  def play_turn(warrior)
  # If there are no enemies, rest until health is 100%
    turn_start_check(warrior)
    actions(warrior)
    turn_end_check(warrior)
  end

  def actions(warrior)
    if @damaged_since_last_turn
      warrior.shoot!
    elsif
      @health < @maxhealth
        warrior.rest!
    else
      warrior.walk!
    end
  end

  def hurt?(warrior)
    warrior.health < 20
  end

  def healthy?(warrior)
    warrior.health = 20
  end

  def alone?(warrior)
    warrior.feel.empty?
  end

  def should_i_move?(warrior)
    if healthy? and alone?
      warrior.rest!
    else
      warrior.walk!
  end

  # Put code here for if health from previous turn is less than last term
  # If true don't rest and keep moving forward
  def turn_start_check(warrior)
    @damaged_since_last_turn = @previoushealth > warrior.health
  end

  def turn_end_check(warrior)
    @previoushealth = warrior.health
  end
end
4

3 回答 3

4

我猜:

def should_i_move?(warrior)
  if healthy? and alone?
    warrior.rest!
  else
    warrior.walk!
  end  # <<MISSING THIS ONE
end
于 2012-05-14T15:30:46.090 回答
4

该错误消息意味着您在end某处缺少关键字。检查您的代码以查看您的所有语句是否正确编写。

于 2012-05-14T15:31:16.230 回答
1

在 Ruby 1.9.3 中,如果您打开警告,您会收到以下警告:

-:46: warning: mismatched indentations at 'end' with 'if' at 42
-:57: warning: mismatched indentations at 'end' with 'def' at 41

然后是错误

-:57: syntax error, unexpected $end, expecting keyword_end

第 46 行对应于第一个end之后def should_i_move?(warrior)

这也适用于早期版本的 Ruby 1.9。

于 2012-05-14T22:49:00.970 回答