1

我是 Rails 和 Ruby 的初学者,我正在开发一个用于跟踪玩家及其赢、输和 elo 的表格的 elo 系统。

现在我收到错误

app/models/player.rb:36: syntax error, unexpected keyword_end, 
expecting end-of-input):
app/controllers/players_controller.rb:3:in `index'

我已经搜索了所有文件以查找缺少的右括号或括号,但找不到任何东西。以下是我的一些代码片段:

玩家控制器索引

def index
@players_items = Player.all.sort{|y,x| x.get_elo() <=> y.get_elo()}
end

PlayerModel 方法

def get_elo()
    return self.elo
end

def update_weight()
    var = wins.count + lose.count
    if(var <= 6)
        self.weight = 50
    elsif(6 < var and var <= 15)
        self.weight = 25
    else
        self.weight = 15
    end
end

def update_elo(p2_elo, result)
    p1_elo = self.elo
    expected_score = 1 / (1 + 10 ** ((p2_elo - p1_elo)/400))
    self.elo += (self.weight * (result - expected_score)).round
end

如果有人可以帮助我,将不胜感激。

编辑:根据要求,这是我的 Player 模型类的第 27-36 行

def win_percentage()
    var = wins.count + lose.count
        if(var == 0)
            return 0.001
    end
    else
        return ((wins.count * 6) - (lose.count * 4))
    end
end
end
4

2 回答 2

2

这是问题:

if(var == 0)
            return 0.001
    end # <~~ why this end keyword ?
    else
        return ((wins.count * 6) - (lose.count * 4))
    end

它应该是 :

if(var == 0)
  return 0.001
else
  return ((wins.count * 6) - (lose.count * 4))
end
于 2013-07-16T19:35:24.327 回答
1

(6 < var <= 15)是有效的语法,但没有意义。这意味着(6 < var) <= 15。既然6 < vartrueor false,那么它将被评估为true <= 15or false <= 15,这将导致错误,除非您奇怪地重写了<=>.

你可能打算(6 < var and var <= 15)


更新

你有两个问题。

  • 你有else……endif……之后end。你可能想要if…… elseend
  • 最后你有一个额外end的。

你的代码看起来不太好。它应该是这样的:

def win_percentage
  return 0.001 if (wins.count + lose.count).zero?
  (wins.count * 6) - (lose.count * 4)
end
于 2013-07-16T19:26:06.300 回答