R,R6 运算符重载

9
考虑以下内容:
A = R6::R6Class("ClassA")
B = R6::R6Class("ClassB")

`+.ClassA` = function(o1,o2) o1 #Trivial Example, Usually do something
`+.ClassB` = function(o1,o2) o1 #Trivial Example, Usually do something

a = A$new()
b = B$new()

a + b

哪个会抛出错误:

Warning: Incompatible methods ("+.ClassA", "+.ClassB") for "+"
Error in a + b : non-numeric argument to binary operator

如何解决上述问题,以便AB都可以重载+运算符,并将它们相加。
1个回答

9

我想发表我的答案,我将类'IAddable'分配给两个R6原型(有点像其他语言中的接口声明)

A = R6::R6Class(c("ClassA","IAddable"))
B = R6::R6Class(c("ClassB","IAddable"))

然后我们可以分配一个单一的重载运算符,所有从这个接口类声明继承的对象都将调用它。

`+.IAddable` = function(o1,o2) o1 #Trivial Example, Usually do something

接下来将按预期工作:

a = A$new()
b = B$new()

a + b  #WORKS, RETURNS a
b + a  #WORKS, RETURNS b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接