2012-10-16 52 views
1

看來,如果我把代碼放在我的三元評估中,它就會失敗,但是它會將truefalse工作。三元評估是否需要參數化?

這裏是我的代碼:

>test = [nil] 
=> [nil] 

>test.any? ? puts "AAA" : puts "BBB" 
SyntaxError: (irb):16: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' 
test.any? ? puts "AAA" : puts "BBB" 
       ^
(irb):16: syntax error, unexpected ':', expecting $end 
test.any? ? puts "AAA" : puts "BBB" 

>test.any? ? true : false 
=> false 

>test << 1 
=> [nil, 1] 

>test.any? ? true : false 
=> true 


>test.any? ? puts "AAA" : puts "BBB" 
SyntaxError: (irb):14: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' 
test.any? ? puts "AAA" : puts "BBB" 
       ^
(irb):14: syntax error, unexpected ':', expecting $end 
test.any? ? puts "AAA" : puts "BBB" 
         ^

回答

3

你需要括號。

>> test.any? ? puts("AAA") : puts("BBB") 
BBB 
=> nil 

您應該避免使用內聯函數進行無插入調用。

+0

謝謝。上面的例子現在可以工作,但開始這個問題的代碼行如下(我剛剛添加了parens),但似乎並不是很高興'@ selected_ratings.any? ? (Movie.where(:rating => @ selected_ratings.keys)):(@movies = Movie.all)'對更復雜的三元組有任何想法? – ProfessionalAmateur

+0

也許你也可以顯示錯誤?但我認爲這個問題不再存在於三元方法中。 – oldergod

+0

我剛剛得到它,第一個選項沒有類似第二個選項的@movies ='。感謝您的幫助! – ProfessionalAmateur