Динамическое определение объема - Глубокая привязка против мелкой привязки - PullRequest
28 голосов
/ 18 ноября 2009

Я пытался разобраться в мелкой привязке и глубокой привязке, википедия не очень хорошо объясняет это правильно. Скажем, у меня есть следующий код, что будет, если язык использует динамическую область видимости с

а) глубокое связывание

б) мелкий переплет?

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 ]

28 голосов
/ 18 ноября 2009

Глубокое связывание связывает окружение во время передачи процедуры в качестве аргумента

Мелкое связывание связывает окружение во время, когда процедура фактически называется

Так что для динамического определения объема с глубоким связыванием, когда add передается в секунду среда имеет вид x = 1, y = 3, а x - это глобальный x, поэтому он записывает 4 в глобальный x, который выбирается write_integer.

Неглубокая привязка просто перемещается вверх, пока не найдет ближайшую переменную, соответствующую имени, поэтому ответ будет 1.

0 голосов
/ 13 декабря 2011

неглубокая привязка должна быть 5. definations: http://www.planet -source-code.com / VB / скрипты / ShowCode.asp? TxtCodeId = 15 & lngWId = 6

...