提问人:Richie Cotton 提问时间:11/14/2016 更新时间:11/14/2016 访问量:2714
什么是基元函数、内部函数、内置函数和特殊函数?[关闭]
What are primitive, internal, builtin, and special functions? [closed]
问:
我已经看到一些调用 C 代码的函数被描述为 、 、 或 。这些功能是什么?primitive
internal
builtin
special
答:
这个问题混淆了两个不同的概念。 并且是 typeof
确定的三种函数类型(以及 s)中的两种。special
builtin
closure
作为特殊/内置与原始或 .内部:quote 是一个特殊的原语,+ 是一个内置的 原始的,cbind 是一个特殊的 .Internal 和 grep 是内置的 .内部。
内置与特殊
如果函数调用 C 代码,则 builtin/special 是指在传递给 C 代码之前是否对其参数进行计算。
内置函数的所有参数都经过计算和传递 到内部函数,按照按值调用, 而特殊函数将未计算的参数传递给 内部功能。
内部与基元
。Internal
和 .基元
是指用于调用 C 代码的接口。Internal 是标准方法,因为您可以在调用 C 代码之前检查 R 代码中的参数。Primitive 是更高的性能,但不允许在函数中使用任何 R 代码。
在构建时编译成 R 的 C 代码可以直接在 什么称为基元或通过 .内部接口,其中 与 .外部接口(语法除外)。更多 准确地说,R 维护一个 R 函数名称和 要调用的相应 C 函数,按照约定,这些函数都启动 替换为“do_”并返回 SEXP。此表(R_FunTab在文件 src/main/names.c 中)还指定了函数的参数数 是必需的或允许的,无论参数是否是 在调用之前进行评估,以及函数是否为“内部” 从某种意义上说,它必须通过 .内部接口, 或直接访问,在这种情况下,它在 R 中打印为 .原始。
使用 的函数。封装在闭包中的 internal() 通常 首选,因为这可确保对 Named 和 Default 进行标准处理 参数。
但是,出于方便和效率的原因(因为那里 是使用 .内部接口包装在一个 函数闭包),原始函数是可以 可直接访问。
评论
r-faq
.Primitive
`+`
`(`
return
is.function(`(`)
is.function(return)
.Primitive()
.Primitive(…)
c
x = function(...) .Primitive("c"); x(1, 2)
.Primitive("c")
y = .Primitive("c")
c
x
c
评论