Message d'erreur
Dans le message, %s marque une valeur que le moteur remplit au moment où il lève l'erreur.
L'histoire
Vous avez écrit une fonction à l'intérieur d'une autre, et la petite lit une valeur qui appartient à la grande. Le moteur a refusé. Voyons pourquoi. Cette pratique s'appelle une fermeture : la fonction intérieure capture en cachette l'état de la fonction extérieure. Dans la maison, c'est interdit, parce qu'une capture cachée est un couplage caché : vous lisez le code de la petite fonction, et vous ne voyez pas d'où vient la valeur. Une fonction imbriquée peut atteindre ses propres paramètres, ses propres valeurs, et le module. Mais pas les valeurs de la fonction qui l'entoure. Notez que le nom existe bien, il est lié dans la fonction englobante. Ce n'est donc pas un nom introuvable, et le message le dit pour ce qu'il est vraiment. Un exemple : une fonction qui calcule un total, et une petite fonction à l'intérieur qui lit ce total directement. Le message nomme la valeur en cause. Pour corriger, passez cette valeur en argument de la fonction intérieure : le lien devient visible, et le code, lisible. Rien de caché, rien de capturé.
Texte issu du catalogue d'erreurs du moteur Rush.
