2.1.5 函数对象

Keywords:

Next: ,Previous: Expression objects,Up: Basic types

2.1.5 函数对象

在 R 里面,函数是对象并且可以有许多和其它对象类似的操作方法。函数(更准确地说是函数闭包(function closure))有三个基本的组成部分:形式化的参数列表,功能实现的主体和环境。参数列表是一个以逗号分割的参数的列表。参数可以是符号,或者是symbol =default 的形式,或者是特殊参数 ...。第二种参数形式常常用于设置参数的默认值。如果函数调用时参数缺省,该值会被采用。...参数比较特殊,而且可以包含任意多的参数。它通常在参数个数未知或者某些参数会传递给其它函数的情况下使用。

功能实现的主体是解析过的 R 语句。它常常是大括弧里面的一系列程序语句。当然,它也有可能是一个单独的语句,一个符号,甚至是一个常量。

函数的环境指的是当一个函数被创建时所激活的环境。任何被该环境绑定的符号都可以被函数调用和访问。函数代码及其对应环境中绑定的东西构成的组合体称为`函数闭包'(function closure)。该术语源自函数化编程理论(functional programming theory)。在本文档中,我们主要使用术语`函数',但使用`闭包'(closure)来强调一个函数相关环境的重要性。

可以通过 formalsbody,和 environment 三个构造(这三个构造也可用在赋值语句的左边)来析取和操作闭包的三个部分。最后一个构造可以用来去掉不想要的环境捕获物(environment capture)。

当一个函数被调用时,一个新的环境(称为求值环境(evaluation environment))将会被创建。该环境的外围(enclosure,见Environment objects)来自函数闭包的环境。这个新的环境最初由函数的未被求值的参数构成;当求值过程进行时,局部变量将会在该环境中创建。

可以方便地用as.listas.function将函数和列表结构相互转换。这些方法可以用来实现和S兼容,但我们不推崇这样使用。

Hits:Loading...

special topic