我知道部分功能是如何工作的。但是,当我查看partial()的源代码时,我不太明白它是如何工作的。谁能告诉我每条线的工作原理?
> partial
function (`_f`, ..., .env = parent.frame(), .lazy = TRUE)
{
stopifnot(is.function(`_f`))
if (.lazy) {
fcall <- substitute(`_f`(...))
}
else {
fcall <- make_call(substitute(`_f`), .args = list(...))
}
fcall[[length(fcall) + 1]] <- quote(...)
args <- list(... = quote(expr = ))
make_function(args, fcall, .env)
}
<environment: namespace:pryr>
什么是`_f`?为什么以这种方式使用substitute()
substitute(`_f`(...))
这是什么?
quote(expr = )
为什么需要以下行?
fcall[[length(fcall) + 1]] <- quote(...)
答案 0 :(得分:0)
R中的某些操作看起来不像函数调用,但它们是。例如,3 + 4也可以写成`+`(3,4)。在这种情况下,由于部分函数通过预先填充参数来工作,因此&#34;替换&#34;这里的工作原理是将环境中的任何变量替换为&#34; ...&#34;。
quote()通过捕获动作
起作用似乎fcall行用于维护最初放入部分调用的内容