Next: , Previous: Lexical environment, Up: Scope of variables



3.5.3 调用堆栈

当函数被调用时, 一个新的求值框架会被创建。在程序执行的任何时刻, 通过调用堆栈(call stack)可以访问当前激活环境。 每当一个函数被调用时,一个被称为上下文(context)的 特殊结构会在内部创建并存放在一个上下文的列表里面。 当一个函数完成求值,它的上下文会从调用堆栈里面去除。

变量定义高于可以得到的调用堆栈时称为动态作用域。 一个变量的绑定由变量的最近定义决定。 这和R里面默认的作用域规则相违背。R里面默认的规则是 变量绑定在函数定义的环境中(词法作用域)。 一些函数,特别是使用和操作模型公式的函数,需要 通过直接访问调用堆栈来模拟动态作用域。

通过 函数名以 sys. 开头的一族函数来访问调用堆栈。 现将它们简单列举如下。

sys.call
获得特定上下文的调用。
sys.frame
获得特定上下文的求值框架。
sys.nframe
获得所有被激活的上下文的环境框架。
sys.function
获得在特定上下文中被调用的函数。
sys.parent
获得当前函数调用的父节点。
sys.calls
获得所有激活的上下文的调用。
sys.frames
获得所有被激活的上下文的求值框架。
sys.parents
获得所有被激活的上下文的数值标签。
sys.on.exit
设置一个特定上下文退出时执行的函数。
sys.status
调用 sys.framessys.parentssys.calls
parent.frame
获得特定父上下文的求值框架。