不幸的是,像(f+g)(3)f和g这两个都是一元函数的东西在R中不起作用.因此,我尝试以下列方式重载"+"运算符以获得一元函数:
"+.function" = function(e1, e2){
return(function(x) e1(x) + e2(x))
}
Run Code Online (Sandbox Code Playgroud)
但如果我尝试使用它,这什么都不做.代码
a = function(x) 2*x
(a+a)(2)
Run Code Online (Sandbox Code Playgroud)
产生相同的错误,如果+.function没有定义.
通过一段时间的游戏,我发现事实上有可能以这种方式添加函数:如果函数是引用类的成员函数,这是有效的!即,以下代码(连同上面的"+"定义)
clsA = setRefClass("clsA",
methods = list(
b = function(x) 2*x
))
inst_a = clsA$new()
(inst_a$b + inst_a$b)(2)
Run Code Online (Sandbox Code Playgroud)
返回"8"(如预期的那样).因此,我已经为我的问题找到了某种解决方法.现在我的问题是:
这种奇怪行为的原因是什么?为什么不+.function关心"通常"功能而是关注类成员函数?有谁知道如何将操作员"扩展"到通常的功能?