【问题标题】:R, R6 Operator OverloadingR, R6 运算符重载
【发布时间】:2016-05-26 13:51:38
【问题描述】:

考虑以下几点:

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都可以重载+操作符,相加。

【问题讨论】:

    标签: r operator-keyword r6


    【解决方案1】:

    我想我会发布我的答案,我将 '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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多