2012-04-10 10 views
2

Diese Linie gibt mir einen Syntaxfehler:"a && not b" ​​gibt Syntaxfehler?

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

Irgendwelche Ideen?

+0

_nicht funktioniert_ in welcher Weise? Können Sie alle drei Zeilen Ihres Programms und die Ausgabe, die Sie erwartet haben, angeben? – sarnold

+0

Sieht für mich perfekt aus, versuche, den Inhalt deines Arrays zu drucken, um zu sehen, was dort drin ist. Es hilft auch, auf Englisch zu schreiben, was die Aussage machen soll. Ie: Ich möchte in die if-Anweisung gehen, wenn das Array eine 'Katze' UND das Array keinen 'Hund' hat. –

+0

Was versuchst du zu erreichen? Tests wären ideal. – shime

Antwort

6

tun:

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

! und not tun meistens das Gleiche, aber nicht ganz austauschbar verwendet werden.

Für die Neugierigen: Es gibt tatsächlich eine Art Eigenart im Rubin-Parser, die es unmöglich macht, Ausdrücke wie diesen zu interpretieren, obwohl sie theoretisch analysierbar sind und klingen.

Diese können analysiert werden:

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

aber diese können nicht:

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

Beachten Sie, dass letzte nur in dem zusätzlichen Platz vor ( anders!

+1

Der einzige Unterschied zwischen den beiden ist der Vorrang. –

+0

eigentlich gibt es ein paar eigenheiten in ruby's parser, die auf ausdrucke wie den angegebenen tippen. –

+0

1.8.7 kann auch nicht "wahr && nicht (wahr)" analysieren. Die letzteren beiden können geparst werden, wenn Sie Klammern um den zweiten Ausdruck herum legen, z. 'wahr && (nicht wahr)'. Ich denke, der Vorrang von '&&' ist so stark, dass es den Parser verwirrt :) – Kelvin

Verwandte Themen