RX0063

Dominio: Análisis sintáctico

Mensaje de error

%s se lee dentro de un fn anidado pero pertenece al fn que lo rodea: una clausura (%s)

En el mensaje, %s marca un valor que el motor completa cuando lanza el error.

La historia

En tu script, una función declarada dentro de otra intenta leer un valor que pertenece a la función de fuera. Eso es una clausura, y rush no las permite. La razón está en una ley de la casa: capturar estado oculto es acoplamiento oculto. Una función interna puede usar sus propios parámetros, sus propios valores y los del módulo, pero no los valores de la función que la rodea. Si pudiera, el cuerpo interno recibiría estado de la llamada exterior sin que nadie se lo pasara, y leer el código no bastaría para saber de dónde viene cada dato. Fíjate: el nombre sí existe, así que el motor no dice que no localiza nada; dice que es una clausura. Un ejemplo: una función externa tiene un valor base, y la interna lo usa sin recibirlo. La solución, que el mensaje te recuerda: pasa ese valor como argumento de la función interna. Lo que una función necesita debe entrar por la puerta, a la vista de todos.

Texto del catálogo de errores del motor de Rush.