Clause
← Toda la documentación

Traducido del original en inglés · a8c3f8f6 · 2026-10-17 · 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 funImplementado; el agotamiento lanza error:function_clause (funs)
Cláusulas de receive + guardsImplementado; los mensajes no encajados permanecen en el buzón y after se ejecuta al agotarse el tiempo (procesos)

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 de un bitstring, o un map y una posición) reside en ranuras de términos del marco; los elementos producidos se acumulan invertidos en otra ranura de término y se convierten en la lista, el bitstring unido o el map una sola vez al final, por lo que las entradas largas necesitan una pila nativa y de proceso constante.

Formas de patrón

FormaReglaRechazo
_Nunca vincula; las apariciones son independientesLeer _ es semántico
Name, _Name, repeticionesAsignación única; las repeticiones necesitan igualdad exacta (1 ≠ 1.0)Lectura no vinculada/insegura semántica; la desigualdad es un desajuste
P1 = P2, paréntesisAmbos restringen el mismo valor; sin vinculaciones 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 las vinculaciones entrantes=>, clave no vinculada semántica; la clave ausente es un desajuste
BitstringsTipo/tamaño/unidad validados; los segmentos anteriores pueden dimensionar los posteriores; la cola sin tamaño al finalEspecificador no válido semántico; los datos cortos son un desajuste
Records de tupla #r{f = P}, #r.fExpandidos a restricciones de tupla; los campos omitidos no se restringenRecord/campo desconocido semántico
Native records locales #r{f = P}Record de este módulo llamado r y después cada campo enumerado (un campo que le falte falla)Record desconocido semántico
Native records 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 native record; 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 a 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 que N esté vinculado de antemano. La aritmética constante incorrecta en una clave o tamaño es legal y falla en el momento del encaje.

La validación de binaries rechaza segmentos con contenedores anidados o alias, modificadores en conflicto, rangos de unidad incorrectos, unidad sin tamaño para los valores por defecto de entero/flotante, tamaño/unidad UTF no válidos, cadenas literales con tipo o tamaño y segmentos binary sin tamaño que no son los últimos.

Ejecución

Límites

La normalización de patrones comparte el presupuesto semántico del módulo (1.000.000 unidades, o 32 por expresión para módulos más grandes) (un entero cuesta aproximadamente lo que sus dígitos decimales); una constante que supere 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 100.000 unidades de trabajo. El parser limita por separado el anidamiento a 256 (techo absoluto 512).