ruby中的条件块错误

ruby中的条件块错误,ruby,operator-precedence,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块。有人能解释一下这是怎么可能的吗?我找不到明确的文档,但大概是三元运算符:具有比将参数传递给方法更高的优先级。这使

鉴于这部分代码有效

if @sprint.nil?
  redirect_to sprints_path
else
  @sprint.define_state
end
我不明白为什么这部分代码没有:

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

我不知道为什么在第二个示例中,程序会立即进入else块。有人能解释一下这是怎么可能的吗?

我找不到明确的文档,但大概是三元运算符:具有比将参数传递给方法更高的优先级。这使得您的示例被解析为:

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

带有:出现在不适当的位置,缺少a?。请注意,该错误不是由?缺少a:因为该部分位于不符合要求的:,后者主要引发语法错误,并阻止前者引发的语法错误。

缺少括号@sprint.nil?重定向_tosprits_path:@sprint.define_state由于原始文件位于多行上,可以省略括号,但三元版本需要括号才能正确解释代码。欢迎使用堆栈溢出。使用标题,如情境:和问题:并不是特别可取的。虽然它似乎有帮助,但Stack Overflow的目标是像一本关于编程问题和答案的烹饪书,一本略为非正式的参考书。因此,用简洁的方式写一个经过深思熟虑的问题,你会做得很好。使用@sprint.nil这样的三元语句不是惯用的,也不推荐使用?将_重定向到sprint_路径:@sprint.define_状态以进行流控制。返回值很好,但将\u重定向到sprints\u路径看起来像是流程中的一个变化。我建议坚持使用if版本。哦,对不起,谢谢。我会更小心的