当查看算术运算符时,它们显示它们的参数具有名称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
Run Code Online (Sandbox Code Playgroud)
是否只能通过位置来定义谁是被除数,谁是除数,还是可以使用参数名称?
创建自定义二元运算符时,不会忽略名称。
`%div%` <- function(e1, e2) {e1 / e2}
`%div%`(e1 = 1, e2 = 2)
#[1] 0.5
`%div%`(e2 = 1, e1 = 2)
#[1] 2
Run Code Online (Sandbox Code Playgroud)
看?groupGeneric:
如果该组的成员作为函数调用,则删除任何参数名称以确保始终使用位置匹配。
注意/提示:我通过 进入该帮助页面?Arithmetic,然后在详细信息部分提到查看调度操作:
一元和二元算术运算符是通用函数:可以单独为它们编写方法,也可以通过 Ops 组通用函数编写方法。(有关如何计算调度的信息,请参阅 Ops。)