ruby中的条件块错误

时间:2015-10-05 17:29:19

标签: ruby operator-precedence

鉴于此部分代码有效,

if @sprint.nil?
  redirect_to sprints_path
else
  @sprint.define_state
end

我不明白为什么这部分代码没有:

@sprint.nil? ? redirect_to sprints_path : @sprint.define_state

我不知道为什么在第二个例子中程序会立即进入else块。有人可以解释一下它是如何可能的吗?

1 个答案:

答案 0 :(得分:0)

我找不到明确的文档,但可能三元运算符? :的优先级高于将参数传递给方法的优先级。这使得您的示例被解析为:

@sprint.nil? ? (redirect_to sprints_path : @sprint.define_state)

:出现在不适当的位置,错过了?。 (请注意,错误不是由?错过:引起的,因为该部分位于违规:之外,后者主要引发语法错误,并阻止语法错误将由前者提出。)