2011-07-20 95 views
1

當的()需要在紅寶石的方法調用在幫助我有代碼:/導軌

signed_in? ? link_to("Sign out", signout_path, :method => :delete) : link_to("Sign in", signin_path) 

但是同樣的事情可以這樣寫:

if(signed_in?) 
    link_to 'Sign Out', signout_path, :method => :delete 
else 
    link_to 'Sign In', signin_path 
end 

在第二種情況下,方法調用的參數不是必需的,在第一種情況下是這樣。這是爲什麼?

+0

因爲在第一種情況下,它們的語法是不明確的。三元運算符是這樣的:條件? if_true:if_false。如果你沒有括號,那就好像你試圖在真實部分有多個陳述一樣。 –

回答

3

當函數調用沒有歧義時,不需要parens。例如:

foo 1, 2 resolves to foo(1,2) 

和類似foo 1, bar 2 would be foo(1,bar(2)),但對於foo 1, bar 2, 3,可以去到任何foo(1,bar(2,3))foo(1,bar(2),3)

所以在最後一個例子,你需要在括號把自己告訴紅寶石你實際上希望它做到。

另外,如果你想調用的方法的返回值的方法,你需要括號太 即foo(1,2).bar

-1

我認爲它只是編寫代碼的風格..

我喜歡選項1,因爲它只使用1行..

+1

它不是一種風格。一個產生錯誤,另一個不產生錯誤。 – Will