Clause
← Gesamte Dokumentation

Übersetzt aus dem englischen Original · 1e3a39c8-dirty · 2026-10-26 · Auf Englisch lesen

Guards

Die Zulässigkeit von Guards folgt den festgelegten Regeln von OTP 29 erl_internal/erl_lint; sie wird nie aus der Registrierung zur Laufzeit abgeleitet. Jeder Operand wird geprüft, auch unerreichbare. Ein Guard gelingt nur, wenn der Endwert das Atom true ist.

Kontrollfluss

OperatorSemantik
A andalso BA muss ein Boolean sein; false → false; andernfalls wird B als beliebiger Term zurückgegeben
A orelse BA muss ein Boolean sein; true → true; andernfalls wird B zurückgegeben
and, or, xorBeide Operanden der Reihe nach ausgewertet, beide Boolean
not ABoolesche Umkehrung

true andalso 7 gibt in einem Rumpf 7 zurück und schlägt als abschließender Guard-Test fehl; (true andalso 7) =:= 7 gelingt. Ein erreichter Fehler in einem verschachtelten Ausdruck weist die ganze Alternative ab: hd([]) orelse true schlägt fehl, hd([]); true gelingt. In Rümpfen lösen ungültige strikte Operanden badarg aus und ein ungültiger linker Operand eines verzögerten Operators {badarg, Value}, wie in OTP.

Katalog

guards.tsv führt alle 81 Guard-Signaturen aus den festgelegten Tabellen guard_bif, new_type_test, old_type_test, arith_op, bool_op und comp_op auf, und ein Test erzwingt exakte Mengengleichheit mit Upstream. Das Audit-Manifest ordnet jede Signatur Resolver, Lowering und Runtime-Zuständigem zu. Alle 81 sind implementiert: self() ist die Pid des aufrufenden Prozesses, node() und node/1 einer Pid, Referenz oder eines Ports sind nonode@nohost (es gibt einen Knoten; jedes andere Argument von node/1 lässt den Guard fehlschlagen, in einem Rumpf badarg). Native Records in Guards: is_record/1,2,3 und Feldzugriff wie in native Records.

Auflösung

Grenzen des Orakels

Das installierte OTP 29.1.1 stürzt bei der SSA-Konvertierung für einige unabhängige moderne Importe hinter veralteten skalaren Aliasen ab; Clause weist diesen nicht autorisierten Zuständigen explizit ab. Der Loader von OTP weist außerdem einen Guard mit einer riesigen literalen Record-Stelligkeit ab, obwohl Lint ihn akzeptiert; für diesen Fall gibt es nur semantische Belege.