2016-08-01 10 views
3

Ich habe ein Problem, die Ausführung im folgenden Code-Snippet zu verstehen.Schwierigkeit zu verstehen, optionale Klammern

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

Es gibt die gewünschte Ausgabe, die yes ist. Aber wenn ich die Klammern von include? Methode wie folgt Weglassen:

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

dann ausgegeben false. Ich verwende ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

Antwort

4

Das ist, weil in dem zweiten Fall Rubin das Ergebnis der gesamten Ausdruck als Argument nimmt.

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

entspricht:

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

Rubin ermöglicht Klammern für Methodenaufrufe zu unterlassen, aber es gibt Fälle, wenn es unmöglich ist, sie zu unterlassen zu schreiben, was Sie gedacht haben.

+0

Du hast meinen Tag gemacht! –

2

Denken Sie daran, wie diese ...

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

die gleiche ist wie ...

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

, die gleich wie ...

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

das ist das gleiche wie ...

puts (false) #=> false 
+0

Ya! Ich habe es @maicher darauf hingewiesen! Danke trotzdem –

Verwandte Themen