首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R,R6运算符重载

R,R6运算符重载
EN

Stack Overflow用户
提问于 2016-05-26 21:51:38
回答 1查看 783关注 0票数 9

请考虑以下几点:

代码语言:javascript
复制
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

这会抛出一个错误:

代码语言:javascript
复制
Warning: Incompatible methods ("+.ClassA", "+.ClassB") for "+"
Error in a + b : non-numeric argument to binary operator

如何解决上述问题,以便AB都可以重载+操作符,并将它们相加在一起。

EN

回答 1

Stack Overflow用户

发布于 2016-05-27 17:35:56

考虑到我应该发布我的答案,我将'IAddable'类分配给了两个R6原型(有点像其他语言中的接口声明)

代码语言:javascript
复制
A = R6::R6Class(c("ClassA","IAddable"))
B = R6::R6Class(c("ClassB","IAddable"))

然后,我们可以分配一个重载操作符,该操作符将被从该接口类声明继承的所有对象调用。

代码语言:javascript
复制
`+.IAddable` = function(o1,o2) o1 #Trivial Example, Usually do something

然后,这将按预期工作:

代码语言:javascript
复制
a = A$new()
b = B$new()

a + b  #WORKS, RETURNS a
b + a  #WORKS, RETURNS b
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37462850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档