2014-02-17 86 views
0

我使用本例中的三元運算符,它工作得很好:三元運算符優先級

out = 'demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential' 

當我申請這<<運營商,我得到了一個異常can't convert true into String

out << 'demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential' 

爲什麼這個?

回答

5

<< has higher precedence then ? operator

所以

out << 'demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential' 

實際上是

(out << 'demo'.start_with?('No information provided')) ? 'No information provided' : 'Confidential' 

按照錯誤out是字符串對象,並String#<<需要它的參數也是一個字符串。但'demo'.start_with?('No information provided')給出了一個true對象,所以你得到了錯誤'不能轉換爲字符串',因爲有像(out << true) ? .. : ..聲明。

總是通過使用paren (..)來避免這種優先級問題。

out << ('demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential') 
+1

確實你是對的。請快速幫助。 – franchez