2016-08-01 53 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指出!不管怎麼說,還是要謝謝你 –