3.5.3 调用堆栈

Keywords:

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
获得特定父上下文的求值框架。

Hits:Loading...

special topic