请考虑以下几点:
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都可以重载+操作符,并将它们相加在一起。
发布于 2016-05-27 17:35:56
考虑到我应该发布我的答案,我将'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 bhttps://stackoverflow.com/questions/37462850
复制相似问题