2012-12-02 107 views
0

ruby​​的新手,探索teranary運算符。三元運算符語法錯誤

這個作品也預計:

5==5? "x" : "y" 

返回 「X」,因爲一切都在Ruby是一種表達。

但是,這不...

user.birthday? "x" : "y" 

它的假設,以檢查是否生日是零,並返回相應的字符串。但它給我一個語法錯誤:

syntax error, unexpected ':', expecting $end 
user.birthday? "x" : "y" 
        ^

這個聲明有什麼不同?

感謝

回答

6

的方法可以而且常常與紅寶石一question mark結束。

user.birthday ? "x" : "y" 
+0

謝謝。但是5 == 5?返回一個布爾值,並且user.birthday?也是。那爲什麼它不這樣工作?在這兩種情況下,語法歸結爲:BOOL IFSTATEMENT:ELSESTATEMENT(PS - 我會在7分鐘內接受你的答案) – 0xSina

+0

在'user.birthday?'中,問號是方法名稱的一部分,所以沒有三元(?)運營商。 –

+2

@ 0xSina:將隱含括號添加到'user.birthday? 「x」:「y」',你得到'user.birthday?(「x」:「y」)'(這根本沒有任何意義)。 –

-1

Ruby是一種面向對象的編程語言,因此所有的方法定義從一個類繼承和來像一個「真」,試試這個:

class User

def birthday(confirm) 
    return true 
end 

end

us = User.new()

us.birthday("My birthday")

rep= us.birthday("My birthday") ? "x": "y"

puts rep

+0

我不確定你在這裏說的究竟是什麼,但我很確定它與這個問題無關。問題在於'生日?'是一種方法,而不是一種三元操作。 – Jon

+0

錯誤出來了,因爲變量和方法不存在,所以你需要聲明它們。 –

0

你的情況的用戶。生日? ? 'x':如果你想檢查生日是否不爲零/假,'y'會做的伎倆。