考虑以下:
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
上面的问题如何解决,所以
A
和B
都可以使+
运算符重载,并将其添加在一起。 最佳答案
以为我会发布我的答案,我为这两个R6原型(prototype)都分配了'IAddable'
类(类似于其他语言的接口(interface)声明)
A = R6::R6Class(c("ClassA","IAddable"))
B = R6::R6Class(c("ClassB","IAddable"))
然后,我们可以分配一个重载运算符,所有重载从此接口(interface)类声明继承的对象都将调用该运算符。
`+.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