2012-04-20 93 views
1
> test = false and true 
=> false 
> test 
=> false 
> test = true and false #this is the point I don't understand! 
=> false 
> test 
=> true 

爲什麼紅寶石這樣的行爲,我將如何正確使用它不會遇到這個問題?布爾邏輯在紅寶石'真假'真'

回答

10

優先順序。 test = true and false含義:

(test = true) and false 

不是這個:

test = (true and false) 

使用括號如上,或&&代替and,如果你想分配給放在最後:

test = true && false 
+3

從github上ruby styleguide:'和和或關鍵字被禁止。這是不值得的。始終使用&&和||代替。' – gracchus 2012-04-20 22:11:45

+0

謝謝,這一個真的讓我今天...多麼奇怪的語言設計選擇... – Jason 2013-09-27 20:57:00

+0

繼承自Perl。一開始只有'&&'和'||'。但是,這些都被用來像C(作爲邏輯推理)和外殼(處理成功/失敗)一樣。在後者中,使用優先級會導致像my @info = stat($ file)||這樣的驚喜在標量而不是列表上下文中調用「stat」調用「error」。爲了解決這些令人頭疼的問題,我們引入了低優先級''和'/'或'/ not',但給了我們新的東西,Ruby和它從Perl獲得的其他東西一起借用了它們。 – 2013-09-27 22:34:53