Next: , Previous: Argument evaluation, Up: Argument evaluation



1.5.1 缺损状态

(非内部的)R函数的事实参数可以比函数需要匹配的形式参数少。 没有匹配上的形式参数在这些参数永远不会被使用(通过懒散赋值的方式) 的情况下是无关紧要的,但是一旦参数被赋值,要么它的默认值被采用(在函数的 赋值环境中),要么抛出一个含有信息的错误,如

     argument "foobar" is missing, with no default

内部的缺损状态通过两种机制处理。对象 R_MissingArg 用于表明一个形式参数没有(默认)值。 当事实参数和形式参数匹配的时候,通过形式参数创建一个新的 参数列表。这些形式参数的值是含有第一个MISSING二进制位集合的 R_MissingArg。 然后,当一个形式参数匹配上一个事实参数, 新的参数列表中对应的数目会被设置为匹配上的事实参数, 并且如果不是 R_MissingArg,缺损二进制位不用设置。

这个新的参数列表用于形成函数的赋值框架。如果命名参数随后给予新的值 (在赋值前),缺损二进制位会被清除。

参数的缺损可以通过函数 missing() 确认。 一个参数只有在设置了缺损二进制位或它的值是R_MissingArg时, 才是明确的缺损。 但是,缺损状态可以在函数间传递,因为 在函数调用的时候把形式参数当着事实参数使用不会当作赋值。 因此 missing() 必须检验一个还没有赋值的形式参数(一个允诺), 以确认它是否可以缺损。这一步可能 需要调查一个允诺等。