Das boolesche Idiom funktioniert mit einer Abkürzungsevaluation (nur den zweiten Operanden bei Bedarf auswerten).
Wenn Sie die Ausdrücke mit explizitem Vorrang umschreiben können Sie sehen, warum Sie nil
bekommen würden:
(true and false) or nil => false or nil => nil
(true and true) or nil => true or nil => true
(true and not false) or nil => true or nil => true
(true and not true) or nil => false or nil => nil
Der Logical Operators Abschnitt Programming in Lua erklären das Idiom:
Ein weiteres nützliches Idiom ist (a und b) oder c (oder einfach a und b oder c, weil und hat einen höheren Vorrang als oder), was dem C-Ausdruck
a? b: c
vorausgesetzt, dass b nicht falsch ist. Zum Beispiel können wir das Maximum von zwei Zahlen x und y mit einer Aussage wie
max = (x> y) und x oder y
Warum kann b
nicht false
sein wählen? Weil die Auswertung immer false
zurückgibt.
1 > 0 and false --> false
1 < 0 and false --> false
[Programmierung in Lua: Logische Operatoren] (http://www.lua.org/pil/3.3.html) – Adam
Synopsis: 'or' und' und' sind nicht 'boolean' Operatoren; Sie sind "Logische Operatoren". Sie benötigen keine booleschen Werte und müssen diese auch nicht zurückgeben. –