我理解这段代码
options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
转换为
if arguments[-1].is_a?(Hash)
options = arguments.pop
else
options = {}
end
当我尝试
时10 > 5 ? puts "greater" : puts "less"
我收到错误。然而
puts 10 > 5 ? "greater" : "less"
返回"greater"
两个代码有什么区别?
答案 0 :(得分:4)
这是一个语法错误,是关键字/运算符的优先级问题。三元运算符的?
优先于传递给puts
的参数,因此ruby解析
10 > 5 ? puts "greater" : puts "less"
作为
(10 > 5) ? (puts) ("greater")
这是无效的语法,:
后会出现puts
。
10 > 5 ? puts("greater") : puts("less")
会按预期工作。
答案 1 :(得分:2)
这只是一个语法错误(我的IRB说syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
)。这将按照您的预期运作:
10 > 5 ? (puts "greater") : (puts "less")
答案 2 :(得分:-1)
使用三元运算符,您将在第一个正在执行的示例options =
中将您的操作放在第一位,这是正确的。在您的第二个示例中,您在检查puts
后是否10 > 5
。它基本上只是一个语法错误。