2012-04-10 50 views
2

這一行給了我一個語法錯誤:「a && not b」給出語法錯誤?

if @array.include?('cat') && not @array.include?('dog')

任何想法?

+0

_not working_以什麼方式?你可以給你的程序的所有三行和你預期的輸出嗎? – sarnold 2012-04-10 00:52:20

+0

對我來說看起來完全有效,請嘗試打印數組的內容以查看實際內容。另外,用英語寫出你想要的語句是有用的。 I.e:當數組有'貓'並且數組沒有'狗'時,我想進入if語句。 – 2012-04-10 00:53:43

+0

你想完成什麼?測試將是理想的。 – shime 2012-04-10 00:58:41

回答

6

這樣做:

if @array.include?('cat') && ! @array.include?('dog') 

!not大多做同樣的事情,但不能完全互換使用。

對於好奇:ruby語法分析器中實際存在一些怪癖,使得它無法解釋像這樣的表達式,儘管它們在理論上可以解析和合理。

這些可以被解析:

not true && true 
true && not(true) 

但這些不能:

true && not true 
true && not (true) 

注意,最後一個只在額外的空間是不同的(之前!

+1

兩者之間的唯一區別就是優先。 – 2012-04-10 00:56:52

+0

實際上ruby的解析器中存在一些怪異的表情,就像給出的表情一樣。 – 2012-04-10 00:58:00

+0

1.8.7也不能解析'true && not(true)'。如果您在第二學期放置括號,則可以解析後兩項。 '真&&(不正確)'。我猜'&&'的優先級太強了,它會使解析器混淆:) – Kelvin 2013-02-04 22:13:57