Clause
← All dokumentation

Översatt från det engelska originalet · 06042fa · 2026-10-09 · 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-klausulerFörmåga (F18)
receiveFörmåga (F22/F25)

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 inbyggd 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 på 1 000 000 enheter (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).