【发布时间】:2013-03-04 03:50:00
【问题描述】:
不幸的是,像(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 甚至没有定义一样的错误。
玩了一段时间后,我发现实际上有可能以这种方式添加函数:如果函数是引用类的成员函数,这可行!即,以下代码(连同上面的“+”定义)
clsA = setRefClass("clsA",
methods = list(
b = function(x) 2*x
))
inst_a = clsA$new()
(inst_a$b + inst_a$b)(2)
返回“8”(如预期的那样)。因此,对于我的问题,我已经有了某种解决方法。现在我的问题是:
这种奇怪行为的原因是什么?为什么+.function 不关心“普通”函数而是类成员函数?有谁知道如何将运算符“扩展”为常用功能?
【问题讨论】:
-
如果你重新定义a的类,例如像class(a)
-
很好,这行得通:-) 好吧,人们仍然可以认为这仍然是一种解决方法,但我认为它比我对参考类的想法“更聪明”得多。非常感谢你的这个想法!
标签: r oop class function reference-class