不幸的是,在 R 中,像 (f+g)(3)
这样同时有两个一元函数 f 和 g 的情况无法实现。因此,我尝试通过以下方式对一元函数重载 "+" 运算符:
"+.function" = function(e1, e2){
return(function(x) e1(x) + e2(x))
}
但是如果我尝试使用这个,它什么也不做。代码如下:
a = function(x) 2*x
(a+a)(2)
如果+.function
未被定义,将会产生与根本未定义相同的错误。
通过玩弄一段时间,我发现实际上有一种方法可以这样添加函数:如果这些函数是引用类的成员函数,则可以。也就是说,下面的代码(连同上面的“+”定义):
clsA = setRefClass("clsA",
methods = list(
b = function(x) 2*x
))
inst_a = clsA$new()
(inst_a$b + inst_a$b)(2)
返回值为“8”(正如预期)。因此,我已经有了某种解决问题的方法。现在我的问题是:
这种奇怪行为的原因是什么?为什么+.function
不关心“常规”函数而关心类成员函数?有人知道如何将该运算符扩展到常规函数吗?