Clause
← All dokumentation

Översatt från det engelska originalet · a8c3f8f6 · 2026-10-17 · Läs på engelska

Mönster, klausuler och matchningar i kroppar

Huvuden i funktionsklausuler, matchningar i kroppar, case-klausuler och if-guards är körbara för varje tillåten termsort (termer). Giltighet och tillgänglighet kontrolleras separat: ogiltig Erlang är ett semantiskt fel även i onåbar kod; giltig kod som kräver en saknad funktion får en diagnostik om förmåga (capability); en avvikelse (mismatch) vid körning är aldrig ett kompilatorfel.

SammanhangStatus
Funktionshuvuden + guardsImplementerat; när alla klausuler är uttömda ges error:function_clause
Matchningar och sekvenser i kroppar, begin/endImplementerat; misslyckande ger error:{badmatch, RHS}
case-klausuler + guardsImplementerat; när alla klausuler är uttömda ges error:{case_clause, Value}
if-guardklausulerImplementerat; när alla klausuler är uttömda ges error:if_clause
maybe med ?= och else-klausulerImplementerat; en misslyckad ?= ger sitt värde eller väljer en else-klausul, och när dessa är uttömda ges error:{else_clause, Value}; kräver funktionen maybe_expr (preprocessor)
List-, binary- och map-comprehensionsImplementerat (nedan)
catch ExprImplementerat; inga mönster (ABI)
try of och catch-klausulerImplementerat; när of är uttömd ges error:{try_clause, Value}, omatchade undantag kastas vidare och after körs på varje väg (ABI); Class:Reason:Stack binder stackspårningen
Fun-klausulerImplementerat; när alla klausuler är uttömda ges error:function_clause (funs)
receive-klausuler + guardsImplementerat; omatchade meddelanden stannar i brevlådan, after körs vid timeout (processer)

Comprehensions

[T1, ..., Tn || Q1, ..., Qm], << T || Q1, ... >> och #{K => V, ... || Q1, ... } följer OTP 29:

Varje generator är en loop i funktionskroppen vars indatamarkör (en rest av en lista eller bitstring, eller en map och en position) lever i termplatser i ramen; de producerade elementen ackumuleras omvänt i en annan termplats och blir listan, den sammanfogade bitstringen eller mapen en gång i slutet, så långa indata kräver konstant native-stack och processtack.

Mönsterformer

FormRegelAvvisning
_Binder aldrig; förekomster är oberoendeAtt läsa _ är semantiskt fel
Name, _Name, upprepningarEnkel tilldelning; upprepningar kräver exakt likhet (1 ≠ 1.0)Obunden/osäker läsning är semantiskt fel; olikhet ger avvikelse
P1 = P2, parenteserBåda begränsar samma värde; inga nyckel-/storleksbindningar mellan syskonOtillåtet syskonberoende är semantiskt fel
Atomer, heltal, tecken, flyttalExakt likhet; nollor med tecken skiljs åtAvvikelse
Konstant aritmetikOTP:s mönsteroperatorer viks exakt; 1 div 0 och icke-konstanter avvisasSemantiskt
Tupler, listor, oäkta svansar, strängarExakt aritet och cons/nil-form; strängar är listorAvvikelse
"prefix" ++ TailEndast prefix som är literal sträng eller literal heltalslistaVariabelt prefix är semantiskt fel
#{K := P}Endast :=; extra nycklar tillåts; #{} testar typen; nycklar är guard-uttryck över inkommande bindningar=>, obunden nyckel är semantiskt fel; saknad nyckel ger avvikelse
BitstringsValiderad typ/storlek/enhet; tidigare segment kan ange storlek för senare; svans utan storlek sistOgiltig specificerare är semantiskt fel; för kort data ger avvikelse
Tupel-records #r{f = P}, #r.fExpanderas till tupelvillkor; utelämnade fält obegränsadeOkänt record/fält är semantiskt fel
Lokala native records #r{f = P}Record i denna modul med namnet r, sedan varje listat fält (ett fält som saknas misslyckas)Okänt record är semantiskt fel
Kvalificerade/importerade native records #m:r{f = P}Record i modulen m med namnet r; exporterat när ett fält listas; sedan varje fältIngen vid kompilering
Anonyma records #_{f = P}Vilket native record som helst; exporterat eller definierat i denna modul när ett fält listas#_{...} som uttryck är ett fel
Anrop, variabel aritmetik, andra uttryckInte mönsterSemantiskt

Räckvidder

Map-nycklar och binary-storlekar läser den inkommande miljön, aldrig syskon: #{K := V} = #{key := K} och <<X:N>> = <<N:8>> kan inte binda sin egen nyckel eller storlek. Inuti en binary kan en storlek läsa tidigare segment: <<N:8, X:N>> är giltigt; {N, <<X:N>>} kräver att N är bundet i förväg. Konstant felaktig aritmetik i en nyckel eller storlek är giltig och misslyckas vid matchning.

Binary-validering avvisar segment med nästlade behållare/alias, motstridiga modifierare, felaktiga enhetsintervall, enhet utan storlek för standardvärden för heltal/flyttal, ogiltig UTF-storlek/enhet, typade/storleksangivna literala strängar och binary-segment utan storlek som inte står sist.

Körning

Gränser

Mönsternormalisering delar modulens semantiska budget (1 000 000 enheter, eller 32 per uttryck för större moduler) (ett heltal kostar ungefär sitt antal decimala siffror); en konstant bortom heltalsgränsen på 4 194 240 bitar är ett illegal pattern, som i OTP (termer). Varje matchningsplan har ett tak på 100 000 arbetsenheter. Parsern begränsar separat nästling till 256 (hårt tak 512).