当查看算术运算符时,它们显示它们的参数具有名称e1
和e2
。当使用这些名称时,看起来它们被忽略,只使用位置。
`/`(e1 = 1, e2 = 2)
#[1] 0.5
`/`(e2 = 1, e1 = 2) #Here I would have expected 2 as the result
#[1] 0.5
是否只能通过位置来定义谁是被除数,谁是除数,或者是否可以使用参数名称?
创建自定义二进制运算符时,不会忽略名称。
`%div%` <- function(e1, e2) {e1 / e2}
`%div%`(e1 = 1, e2 = 2)
#[1] 0.5
`%div%`(e2 = 1, e1 = 2)
#[1] 2
2条答案
按热度按时间wa7juj8i1#
参见
?groupGeneric
:如果此组的成员作为函数调用,则将删除所有参数名称,以确保始终使用位置匹配。
注意/提示:我通过
?Arithmetic
进入帮助页面,然后在 Details 部分提到查看 Ops 进行调度:一元和二元算术运算符是泛型函数:方法可以单独编写,也可以通过Ops组通用函数编写。(请参阅Ops了解如何计算分派。)
gr8qqesn2#
当我们深入研究
C
source code of/
时,我们可以看到下面两个标量的代码片段(我不是分析源代码的RMaven,但我们可能也可以从中找到一些线索)。似乎参数名没有被考虑,而只是位置。