我需要帮助搞清楚这里发生了什么.
g <- function(x, y=NULL, z=NULL) invisible(NULL)
h <- function(...) {
args <- as.list(match.call(g))[-1]
print(args)
## lapply(args, eval)
}
f <- function(...) {
h(...)
}
Run Code Online (Sandbox Code Playgroud)
函数h()打印未评估参数的命名列表,然后尝试评估参数.
看看f用z=3和调用时会发生什么z=-3.
> f(1, z=3)
$x
[1] 1
$z
[1] 3
> f(1, z=-3)
$x
[1] 1
$z
..2
Run Code Online (Sandbox Code Playgroud)
这是什么..2?请注意,h(1, z=-3)产生不同的输出:
> h(1, z=-3)
$x
[1] 1
$z
-3
Run Code Online (Sandbox Code Playgroud)
第二个问题很简单.您有一个函数可以从函数内部创建打印的副作用,作为最后一个被调用的函数.该print函数将其参数作为值返回,因此当函数退出时,控制台的read-eval-print行为会再次显示它.
第一个问题深入研究了内部运作.在省略号的项目得到暂时的名称:..1,..2,..3等.当在前面使用减号2,你实际是在一元运算符来改变其值.你得到与log(2)第二个参数完全相同的结果:
> f(1,log(2))
$x
[1] 1
$y
..2
Run Code Online (Sandbox Code Playgroud)
我认为..2当f的第二个参数是原子时不出现的原因是需要一个不同的评估过程(或没有评估)过程.角色对象也会出现相同的行为.
> f(1,"a")
$x
[1] 1
$y
[1] "a"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |