efr*_*rey 12 language-agnostic scope lexical-scope
在为来自其他语言的人进行R编程时, John Cook说
R使用词法作用域,而S-PLUS使用静态作用域.差异可能很微妙,特别是在使用闭包时.
我发现这很奇怪,因为我一直认为词法范围和静态范围是同义词.
词汇和静态范围是否有明显的属性,或者这是一种区别,从社区到社区,人与人之间的区别?如果是这样,那么一般的阵营是什么?我如何将它们区分开来,以便在他们使用这些词语时我能更好地理解某些人的意思.
tor*_*rek 10
维基百科(和我)同意你的观点,术语"词法范围"和"静态范围"是同义词. 这个Lua讨论试图做出区分,但指出人们不同意这种区别是什么.:-)
在我看来,尝试的区别与访问不同的函数激活记录("堆栈块",如果你愿意)中的名称有关,而不是最当前执行记录,主要(仅?)发生在嵌套中功能:
function f:
var x
function h:
var y
use(y) -- obviously, accesses y in current activation of h
use(x) -- the question is, which x does this access?
Run Code Online (Sandbox Code Playgroud)
对于词法范围,答案是"激活f那个称为激活h",而动态范围则意味着"最近激活的任何变量命名为x"(可能不是f).另一方面,如果语言完全禁止使用x,那么毫无疑问"这x是什么",因为答案是"错误".:-)看起来有些人使用"静态范围"来引用第三种情况.