Tradfns (традиционные функции, использующие ∇
и заголовок и т. Д. c.) Используют dynamici c scoping , что означает, что они "видят" среду того места, откуда они вызваны , (Это в отличие от dfns, которые используют лексическая область видимости ; они видят среду, в которой они были определены.) Подробнее см. документацию .
Теперь, когда G
вызывает F
, в то время как x
локализован в G
, глобальный x
невидим для F
, поскольку локализация в G
скрывает глобальное x
.
Уведомление что ##.Test.
не меняет, в каком пространстве имен мы работаем. x
все еще затенен.
Если бы вместо этого вы использовали dfns, вы бы увидели желаемое поведение:
:Namespace Test
x ← 0
F←{
##.Test.x←1
}
G←{
x←0
F ⍬
}
:EndNamespace
Попробуйте онлайн!