不幸的是,像(f+g)(3)
f 和 g 都是一元函数这样的事情在 R 中不起作用。因此,我尝试通过以下方式重载一元函数的“+”运算符:
"+.function" = function(e1, e2){
return(function(x) e1(x) + e2(x))
}
但是,如果我尝试使用它,这将无济于事。编码
a = function(x) 2*x
(a+a)(2)
+.function
产生与 if甚至没有定义相同的错误。
玩了一段时间后,我发现实际上有可能以这种方式添加函数:如果函数是引用类的成员函数,那就行了!即,以下代码(连同上面的“+”定义)
clsA = setRefClass("clsA",
methods = list(
b = function(x) 2*x
))
inst_a = clsA$new()
(inst_a$b + inst_a$b)(2)
返回“8”(如预期的那样)。因此,对于我的问题,我已经有了某种解决方法。现在我的问题是:
这种奇怪行为的原因是什么?为什么不+.function
关心“普通”函数而是类成员函数?有谁知道如何将运算符“扩展”到常用功能?