鉴于此部分代码有效,
if @sprint.nil?
redirect_to sprints_path
else
@sprint.define_state
end
我不明白为什么这部分代码没有:
@sprint.nil? ? redirect_to sprints_path : @sprint.define_state
我不知道为什么在第二个例子中程序会立即进入else
块。有人可以解释一下它是如何可能的吗?
答案 0 :(得分:0)
我找不到明确的文档,但可能三元运算符?
:
的优先级高于将参数传递给方法的优先级。这使得您的示例被解析为:
@sprint.nil? ? (redirect_to sprints_path : @sprint.define_state)
:
出现在不适当的位置,错过了?
。 (请注意,错误不是由?
错过:
引起的,因为该部分位于违规:
之外,后者主要引发语法错误,并阻止语法错误将由前者提出。)