2013-01-11 139 views
0

比較X時,爲什麼這工作得很好:奇怪的語法錯誤與x.method

t=" 
"+$<.read;puts t.reverse==t ?"YES":"NO" 

但這:

t=" 
"+$<.read;puts t==t.reverse ?"YES":"NO" 

說:

A.rb:2: syntax error, unexpected tCHAR, expecting $end 
"+$<.read;puts t==t.reverse ?"YES":"NO" 
          ^

我用紅寶石1.9.2p290 (2011-07-09)[i386-mingw32]。
示例STDIN字符串是XX.\n...\n.XX\n

+0

這段代碼如何打高爾夫? – Riker

回答

2

看起來Ruby正在解析後者作爲對#reverse?的潛在調用。另一種方式切換時會消除模糊性。在條件周圍添加括號應該允許雙向。

+0

+1。這看起來像不使用括號來強制解釋者理解參數在哪裏的典型情況。使用'(t == t.reverse)'會解決它。我知道括號的使用是可選的,許多Ruby編碼器避開它們,但是,來自C和Perl,我更喜歡通過放置括號來強制優先。 –

+1

無論哪種方式工作,你只需要一個空間後?在三元。 – iosctr

+0

@TheTinMan,它不像是我*不喜歡括號*。這是代碼編寫的代碼。 – Nakilon