Ruby的三元运算符

时间:2014-09-24 22:02:31

标签: ruby

我理解这段代码

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"两个代码有什么区别?

3 个答案:

答案 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。它基本上只是一个语法错误。