r语言 - {rlang} 的 'curly-curly' 运算符 '{{' 是如何实现的?



help("nse-force"){rlang}文档给出了以下内容:

函数参数的花括号操作符{{}}有点特殊,因为它强制使用函数参数并立即解除它。在适当的位置替换被消除的表达式,准备在另一个上下文中求值,例如数据帧。

我同样对'bang-bang'操作符!!感到困惑,关于它的文档对于引子下发生的事情同样迟钝。

我的问题不是关于如何使用操作符,因为它的用法(我认为)非常简单。相反,我想知道这样的操作符是如何在{rlang}幕后实际实现的。据一个包的作者说,{{ foo }}基本上变成了!!rlang::enquo(foo)。然而,我仍然无法理解像这样的非标准操作符实际上是如何实现的,特别是考虑到这个似乎"只是工作",无论它是否被{rlang}函数使用。实际上只有才能与{rlang}支持的函数一起工作-感谢@Konrad Rudolph的更正。

看源代码,我能猜到的是它是用C或c++完成的。谁能多给我一些信息吗?

然而,我仍然无法理解像这样的非标准操作符实际上是如何实现的,特别是考虑到这一个似乎'只是工作',无论它是否被{rlang}函数使用。

It"只是工作"与任意函数-相反:函数需要意识到整洁的计算。你可能猜到了,没有{{运算符。相反,' rlang '使用NSE捕获未求值的参数,然后检查表达式的解析树是否包含两个嵌套的{调用。然后,它接受未求值的表达式并对其进行适当的转换。

最新更新