Clause
← Toute la documentation

Traduit de l'original anglais · 1e3a39c8-dirty · 2026-10-26 · Lire en anglais

Guards

La légalité des guards suit les règles erl_internal/erl_lint épinglées d'OTP 29 ; elle n'est jamais déduite de l'enregistrement au runtime. Chaque opérande est vérifié, y compris les opérandes inaccessibles. Un guard ne réussit que lorsque la valeur finale est l'atome true.

Flot de contrôle

OpérateurSémantique
A andalso BA doit être booléen ; false → false ; sinon renvoie B comme terme quelconque
A orelse BA doit être booléen ; true → true ; sinon renvoie B
and, or, xorLes deux opérandes évalués dans l'ordre, tous deux booléens
not AInverse booléen

true andalso 7 renvoie 7 dans un corps et échoue comme test final de guard ; (true andalso 7) =:= 7 réussit. Une erreur atteinte dans une expression imbriquée rejette toute l'alternative : hd([]) orelse true échoue, hd([]); true réussit. Dans les corps, des opérandes stricts incorrects lèvent badarg et un opérande gauche paresseux incorrect lève {badarg, Value}, comme dans OTP.

Catalogue

guards.tsv liste les 81 signatures de guard issues des tables épinglées guard_bif, new_type_test, old_type_test, arith_op, bool_op et comp_op, et un test impose l'égalité exacte des ensembles avec l'amont. Le manifeste d'audit associe chacune à un résolveur, un abaissement et un responsable runtime. Les 81 sont toutes implémentées : self() est le pid du processus appelant, node() et node/1 d'un pid, d'une référence ou d'un port valent nonode@nohost (il n'y a qu'un nœud ; tout autre argument de node/1 fait échouer le guard, badarg dans un corps). Native records dans les guards : is_record/1,2,3 et accès aux champs comme dans native records.

Résolution

Limites de l'oracle

OTP 29.1.1 installé plante lors de la conversion SSA pour certains imports modernes sans rapport masqués par d'anciens alias scalaires ; Clause rejette explicitement ce responsable non autorisé. Le chargeur d'OTP rejette aussi un guard avec une arité de record littérale énorme bien que le lint l'accepte ; ce cas n'a qu'une preuve sémantique.