Ich erinnere mich irgendwo gelesen zu haben , dass not
und !
unterschiedlich bewertet, und ich kann es nicht in der Dokumentation. Sind sie auch?
ruby
boolean-logic
0112
quelle
quelle
Antworten:
Sie sind fast synonym, aber nicht ganz. Der Unterschied besteht darin, dass er
!
eine höhere Priorität alsnot
und hat&&
und||
eine höhere Priorität alsand
und hator
.!
hat die höchste Priorität aller Operatoren undnot
eine der niedrigsten. Die vollständige Tabelle finden Sie in den Ruby-Dokumenten .Betrachten Sie als Beispiel:
Im ersten Beispiel
!
hat es die höchste Priorität, also sagen Sie effektivfalse && false
.Im zweiten Beispiel
not
hat eine niedrigere Priorität alstrue && false
, so dass dies dasfalse
vontrue && false
nach "umgeschaltet" hattrue
.Die allgemeine Richtlinie scheint zu sein, dass Sie sich daran halten sollten
!
, es sei denn, Sie haben einen bestimmten Grund für die Verwendungnot
.!
in Ruby verhält sich wie die meisten anderen Sprachen und ist "weniger überraschend" alsnot
.quelle
unless
in diesem Fall verwenden?unless
ist in der Rubinwelt einfach nicht wirklich beliebt. Der allgemeine Konsens ist, dass es nur stört, wenn es!
in den meisten Situationen genauso gut funktioniert. Ich bin mir sicher, dass es Fälle gibt, in denen es nicht aussagekräftiger ist, aber ich lenke klar.unless
ungünstig ist. Das, was einem Konsens am nächsten kommt, sagt etwas anderes.not
kann. In Python weise ich Variablen manchmal Boolesche Werte zu, um das Lesen von if-Anweisungen zu erleichtern. Das könnte bedeuten, das Muster zu verwendenx = not y
, bei dem y etwas Komplexes ist. In Rubyx = !y
funktioniert,x = not y
bekommt abersyntax error, unexpected tIDENTIFIER, expecting '('
. Die Rangfolge bedeutet, dass dies Klammern um das Recht der Zuweisung op benötigt, um zu arbeiten :x = (not y)
.Eine einfache Möglichkeit, den
not
Bediener zu verstehen , besteht darin, ihnnot true && false
als äquivalent zu betrachten!(true && false)
quelle