help("nse-force")
的{rlang}
文档给出了以下内容:
函数参数的花括号操作符{{}}有点特殊,因为它强制使用函数参数并立即解除它。在适当的位置替换被消除的表达式,准备在另一个上下文中求值,例如数据帧。
我同样对'bang-bang'操作符!!
感到困惑,关于它的文档对于引子下发生的事情同样迟钝。
我的问题不是关于如何使用操作符,因为它的用法(我认为)非常简单。相反,我想知道这样的操作符是如何在{rlang}
幕后实际实现的。据一个包的作者说,{{ foo }}
基本上变成了!!rlang::enquo(foo)
。然而,我仍然无法理解像这样的非标准操作符实际上是如何实现的,特别是考虑到这个似乎"只是工作",无论它是否被实际上只有才能与{rlang}支持的函数一起工作-感谢@Konrad Rudolph的更正。{rlang}
函数使用。
看源代码,我能猜到的是它是用C或c++完成的。谁能多给我一些信息吗?
然而,我仍然无法理解像这样的非标准操作符实际上是如何实现的,特别是考虑到这一个似乎'只是工作',无论它是否被{rlang}函数使用。
It不"只是工作"与任意函数-相反:函数做需要意识到整洁的计算。你可能猜到了,没有{{
运算符。相反,' rlang '使用NSE捕获未求值的参数,然后检查表达式的解析树是否包含两个嵌套的{
调用。然后,它接受未求值的表达式并对其进行适当的转换。