2016-08-01 114 views
3

我在理解下面的代码片段中的执行过程中遇到问题。理解可选括号的困难

x = 5 
puts (0..10).include?(x) ? "yes" : "no" 

它给出所需的输出是yes。但是,当我忽略include? 方法的括号内是这样的:

x = 5 
puts (0..10).include? x ? "yes" : "no" 

输出为false。 我正在使用ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

回答

4

这是因为在第二种情况下,ruby将整个x ? "yes" : "no" expresion的结果作为参数。

puts (0..10).include? x ? "yes" : "no" 

等同于:

puts (0..10).include?(x ? "yes" : "no") 

的Ruby允许省略方法调用括号,但也有情况下,当它不可能忽略他们写你自己的预期。

+0

你让我的一天! –

2

认为它是这样的...

puts (0..10).include? x ? "yes" : "no" 

是一样的...

puts ((0..10).include? (x ? "yes" : "no")) 

这是一样的...

puts ((0..10).include? ("yes")) 

这是相同...

puts (false) #=> false 
+0

雅!我明白了@Micher指出!不管怎么说,还是要谢谢你 –