Alcance Dinámico-Encuadernación Profunda vs Encuadernación superficial
He estado tratando de conseguir mi cabeza alrededor de encuadernación superficial y encuadernación profunda, wikipedia no hace un buen trabajo de explicarlo correctamente. Digamos que tengo el siguiente código, ¿cuál sería la salida si el lenguaje utiliza el alcance dinámico con
A) unión profunda
B) unión superficial?
x: integer := 1
y: integer := 2
procedure add
x := x + y
procedure second(P:procedure)
x:integer := 2
P()
procedure first
y:integer := 3
second(add)
----main starts here---
first()
write_integer(x)
2 answers
El enlace profundo enlaza el entorno en el momento en que se pasa el procedimiento como argumento
La unión superficial se une al entorno en el momento en que el procedimiento se llama realmente
Así que para el ámbito dinámico con enlace profundo cuando add se pasa al segundo el entorno es x = 1 , y = 3 y el x es el global x por lo que escribe 4 en el global x, que es el recogido por el write_integer.
El enlace superficial solo atraviesa hasta que encuentra la variable más cercana que corresponde al nombre por lo que la respuesta sería 1.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-28 23:14:18
La unión superficial debe ser 5. definiciones: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=15&lngWId=6
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-13 04:20:06