Динамическое масштабирование - глубокое связывание с мелким переплетением
Я пытался размахивать головой по мелкой привязке и глубокой привязке, википедия не очень хорошо объясняет это. Скажем, у меня есть следующий код, какой будет выход, если язык использует динамическое масштабирование с помощью
a) глубокая привязка
b) неглубокая привязка?
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)
Ответы
Ответ 1
Глубокое привязку связывает среду в момент, когда процедура передается как аргумент
Неверное связывание связывает среду в то время, когда процедура фактически называется
Итак, для динамического охвата с глубокой привязкой, когда add передается во вторую
среда x = 1, y = 3, а x - глобальная x, поэтому она записывает 4 в глобальный x, который выбирается с помощью write_integer.
Неверное связывание просто проходит до тех пор, пока не найдет ближайшую переменную, которая соответствует имени, поэтому ответ будет равен 1.
Ответ 2
мелкая привязка должна быть 5.
definations:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=15&lngWId=6