顶层 R 表达式的返回值是否打印由全局布尔变量 R_Visible 控制的。
这个变量在所有原始的和内部的函数的条目中设置为true 或 false 是基于文件
names.c 中表的eval列而作的:可以通过宏 PRIMPRINT
获取适当的设置。
R的原始函数 invisible 使用的机制为:
它仅仅在条目前设置 R_Visibility = FALSE,
并且返回它的参数。
对于大多数函数,内部情况是,当它们进入时,
R_Visible的设置是它们返回时使用的值,
除非一些例外情况下。R 函数
identify,options,system 和 writeBin
决定了参数或用户行为的结果是否可见。
另外一些函数自己分发可能改变可见性标签的函数:
例如1,
.Internal, do.call, eval,
eval.with.vis2, if,
NextMethod, Recall, recordGraphics,
standardGeneric, switch 和 UseMethod。
`专用的'原始和内部函数只有在设置 R_Visible 后
才给它们的参数赋值,并且参数赋值 (例如PR#9263中的一个参数)可以改变标签
的值。R 2.5.0之前,这些函数的已知实例在参数的内部
赋值后重新设置标签:相关例子包括
[, [[, $, c, cbind,
dump, rbind 和 unlist,以及
语言的一些基本构成 (它们是原始函数)
for, while 和
repeat。
R_Visible 标签可以在函数求值过程中改变。
在代码中可以加warning,writeChar
和调用GText的图形函数(PR#7397)的注释。
(既然C层次的函数eval 设定 R_Visible,
这同样可用于其它调用它的函数。既然允诺求值的时候调用它,
在对象查找的时候都可以改变 R_Visible。)
从 R 2.1.0开始,通过设置R_Visible = FALSE标识
的内部函数,在返回的时候强制这一步。
从 R 2.5.0 开始,内部和原始函数强制 R_Visible 在
返回时的文档记录设置,除非C代码允许改变它
(PRIMPRINT的值为2时表明有例外)。
事实上的自动打印通过文件print.c里面的 PrintValueEnv 实现的。
如果被答应的对象有S4二进制位集和打开的S4方法分发,
通过调用 show 打印该对象。另外,如果对象的二进制位被设定了
(因此,该对象有一个"class"属性),调用 print
来分发方法:对于没有类属性的对象,调用内部
代码print.default。