Clause
← Toda la documentación

Traducido del original en inglés · 06042fa · 2026-10-09 · Leer en inglés

Patrones, cláusulas y encajes en el cuerpo

Las cabeceras de cláusulas de función, los encajes (matches) en el cuerpo, las cláusulas de case y los guards de if son ejecutables para todos los tipos de término admitidos (términos). La legalidad y la disponibilidad se comprueban por separado: el Erlang inválido es un error semántico incluso en código inalcanzable; el código legal que necesita una funcionalidad ausente recibe un diagnóstico de capacidad; un desajuste en tiempo de ejecución nunca es un error del compilador.

ContextoEstado
Cabeceras de función + guardsImplementado; el agotamiento lanza error:function_clause
Encajes y secuencias en el cuerpo, begin/endImplementado; el fallo lanza error:{badmatch, RHS}
Cláusulas de case + guardsImplementado; el agotamiento lanza error:{case_clause, Value}
Cláusulas de guard de ifImplementado; el agotamiento lanza error:if_clause
maybe con ?= y cláusulas elseImplementado; un ?= fallido produce su valor o selecciona una cláusula else, cuyo agotamiento lanza error:{else_clause, Value}; necesita la funcionalidad maybe_expr (preprocesador)
Comprehensions de listas, binaries y mapsImplementado (más abajo)
catch ExprImplementado; sin patrones (ABI)
Cláusulas of y catch de tryImplementado; el agotamiento de of lanza error:{try_clause, Value}, las excepciones no encajadas se relanzan y after se ejecuta en todos los caminos (ABI); Class:Reason:Stack vincula la traza de pila
Cláusulas de funCapacidad (F18)
receiveCapacidad (F22/F25)

Comprehensions

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

Cada generador es un bucle en el cuerpo de la función cuyo cursor de entrada (el resto de una lista o bitstring, o un map y una posición) reside en slots de término del marco; los elementos producidos se acumulan invertidos en otro slot de término y se convierten en la lista, el bitstring unido o el map una sola vez al final, de modo que las entradas largas necesitan una pila nativa y de proceso constante.

Formas de patrón

FormaReglaRechazo
_Nunca vincula; apariciones independientesLeer _ es semántico
Name, _Name, repeticionesAsignación única; las repeticiones exigen igualdad exacta (1 ≠ 1.0)Lectura no vinculada/insegura semántica; la desigualdad no encaja
P1 = P2, paréntesisAmbos restringen el mismo valor; no hay vínculos de clave/tamaño entre hermanosDependencia ilegal entre hermanos semántica
Átomos, enteros, caracteres, flotantesIgualdad exacta; el cero con signo es distintoDesajuste
Aritmética constanteOperadores de patrón de OTP plegados exactamente; 1 div 0 y no constantes rechazadosSemántico
Tuplas, listas, colas impropias, cadenasAridad exacta y forma cons/nil; las cadenas son listasDesajuste
"prefix" ++ TailSolo prefijo de cadena literal o de lista de enteros literalPrefijo variable semántico
#{K := P}Solo :=; se permiten claves adicionales; #{} comprueba el tipo; las claves son expresiones de guard sobre los vínculos entrantes=>, clave no vinculada semántico; clave ausente no encaja
BitstringsTipo/tamaño/unidad validados; los segmentos anteriores pueden dimensionar los posteriores; cola sin tamaño al finalEspecificador inválido semántico; datos cortos no encajan
Records de tupla #r{f = P}, #r.fExpandidos a restricciones de tupla; los campos omitidos no se restringenRecord/campo desconocido semántico
Records nativos locales #r{f = P}Record de este módulo llamado r, después cada campo enumerado (un campo que le falte hace fallar)Record desconocido semántico
Records nativos cualificados/importados #m:r{f = P}Record del módulo m llamado r; exportado cuando se enumera un campo; después cada campoNinguno en tiempo de compilación
Records anónimos #_{f = P}Cualquier record nativo; exportado o definido en este módulo cuando se enumera un campo#_{...} como expresión es un error
Llamadas, aritmética con variables, otras expresionesNo son patronesSemántico

Ámbitos

Las claves de map y los tamaños de binary leen el entorno entrante, nunca los hermanos: #{K := V} = #{key := K} y <<X:N>> = <<N:8>> no pueden vincular su propia clave o tamaño. Dentro de un mismo binary, un tamaño puede leer segmentos anteriores: <<N:8, X:N>> es legal; {N, <<X:N>>} necesita N vinculado de antemano. La aritmética constante errónea en una clave o tamaño es legal y falla en el momento del encaje.

La validación de binaries rechaza los segmentos de contenedor anidado/alias, los modificadores en conflicto, los rangos de unidad erróneos, la unidad sin tamaño para los valores por defecto entero/flotante, el tamaño/unidad UTF no válido, las cadenas literales con tipo/tamaño y los segmentos binary sin tamaño que no son el último.

Ejecución

Límites

La normalización de patrones comparte el presupuesto semántico de 1.000.000 de unidades del módulo (un entero cuesta aproximadamente sus dígitos decimales); una constante que supera el límite de enteros de 4.194.240 bits es un illegal pattern, como en OTP (términos). Cada plan de encaje tiene un techo de trabajo de 100.000. El analizador sintáctico limita por separado el anidamiento a 256 (techo absoluto 512).