Clause
← Toute la documentation

Traduit de l'original anglais · 06042fa · 2026-10-09 · Lire en anglais

Motifs, clauses et correspondances dans les corps

Les têtes de clauses de fonction, les correspondances dans les corps, les clauses de case et les gardes de if sont exécutables pour tous les types de termes admis (termes). La légalité et la disponibilité sont vérifiées séparément : un Erlang invalide est une erreur sémantique même dans du code inaccessible ; un code légal qui requiert une fonctionnalité manquante reçoit un diagnostic de capacité (capability) ; une non-correspondance à l'exécution n'est jamais une erreur de compilation.

ContexteÉtat
Têtes de fonction + gardesImplémenté ; l'épuisement lève error:function_clause
Correspondances et séquences dans les corps, begin/endImplémenté ; un échec lève error:{badmatch, RHS}
Clauses de case + gardesImplémenté ; l'épuisement lève error:{case_clause, Value}
Clauses de garde de ifImplémenté ; l'épuisement lève error:if_clause
maybe avec ?= et clauses elseImplémenté ; un ?= en échec produit sa valeur ou sélectionne une clause else, dont l'épuisement lève error:{else_clause, Value} ; requiert la fonctionnalité maybe_expr (préprocesseur)
Comprehensions de liste, de binary et de mapImplémenté (ci-dessous)
catch ExprImplémenté ; pas de motifs (ABI)
Clauses try of et catchImplémenté ; l'épuisement de of lève error:{try_clause, Value}, les exceptions non filtrées sont relevées et after s'exécute sur tous les chemins (ABI) ; Class:Reason:Stack lie la trace de pile
Clauses de funCapacité (F18)
receiveCapacité (F22/F25)

Comprehensions

[T1, ..., Tn || Q1, ..., Qm], << T || Q1, ... >> et #{K => V, ... || Q1, ... } suivent OTP 29 :

Chaque générateur est une boucle dans le corps de la fonction dont le curseur d'entrée (un reste de liste ou de bitstring, ou une map et une position) vit dans des emplacements de termes du cadre ; les éléments produits s'accumulent à l'envers dans un autre emplacement de terme et deviennent la liste, la bitstring jointe ou la map une seule fois à la fin, de sorte que les longues entrées ne demandent qu'une pile native et de processus constante.

Formes de motifs

FormeRègleRejet
_Ne lie jamais ; occurrences indépendantesLire _ est sémantique
Name, _Name, répétitionsAffectation unique ; les répétitions exigent l'égalité exacte (1 ≠ 1.0)Lecture non liée/non sûre sémantique ; l'inégalité ne correspond pas
P1 = P2, parenthèsesLes deux contraignent la même valeur ; pas de liaisons de clé/taille entre frèresDépendance illégale entre frères sémantique
Atomes, entiers, caractères, flottantsÉgalité exacte ; zéro signé distinctNon-correspondance
Arithmétique constanteOpérateurs de motif d'OTP réduits exactement ; 1 div 0 et les non-constantes rejetésSémantique
Tuples, listes, queues impropres, chaînesArité exacte et forme cons/nil ; les chaînes sont des listesNon-correspondance
"prefix" ++ TailPréfixe chaîne littérale ou liste d'entiers littérale uniquementPréfixe variable sémantique
#{K := P}:= uniquement ; clés supplémentaires autorisées ; #{} teste le type ; les clés sont des expressions de garde sur les liaisons entrantes=>, clé non liée sémantique ; clé manquante ne correspond pas
BitstringsType/taille/unité validés ; les segments précédents peuvent dimensionner les suivants ; queue sans taille en dernierSpécificateur invalide sémantique ; données trop courtes ne correspondent pas
Records tuples #r{f = P}, #r.fDéveloppés en contraintes de tuple ; champs omis non contraintsRecord/champ inconnu sémantique
Native records locaux #r{f = P}Record de ce module nommé r, puis chaque champ listé (un champ absent échoue)Record inconnu sémantique
Native records qualifiés/importés #m:r{f = P}Record du module m nommé r ; exporté quand un champ est listé ; puis chaque champAucun à la compilation
Records anonymes #_{f = P}Tout native record ; exporté ou défini dans ce module quand un champ est listé#_{...} comme expression est une erreur
Appels, arithmétique sur variables, autres expressionsPas des motifsSémantique

Portées

Les clés de map et les tailles de binary lisent l'environnement entrant, jamais les frères : #{K := V} = #{key := K} et <<X:N>> = <<N:8>> ne peuvent pas lier leur propre clé ou taille. Dans un même binary, une taille peut lire les segments précédents : <<N:8, X:N>> est légal ; {N, <<X:N>>} exige que N soit lié auparavant. Une arithmétique constante erronée dans une clé ou une taille est légale et échoue au moment de la correspondance.

La validation des binaries rejette les segments conteneurs imbriqués/alias, les modificateurs contradictoires, les plages d'unité incorrectes, l'unité sans taille pour les valeurs par défaut entier/flottant, les tailles/unités UTF invalides, les chaînes littérales typées/dimensionnées et les segments binary sans taille qui ne sont pas en dernière position.

Exécution

Limites

La normalisation des motifs partage le budget sémantique de 1 000 000 unités du module (un entier coûte environ son nombre de chiffres décimaux) ; une constante au-delà de la limite des entiers de 4 194 240 bits est un illegal pattern, comme dans OTP (termes). Chaque plan de correspondance a un plafond de 100 000 unités de travail. L'analyseur limite séparément l'imbrication à 256 (plafond strict 512).