gpt4 book ai didi

R, R6 运算符重载

转载 作者:行者123 更新时间:2023-12-04 07:51:23 24 4
gpt4 key购买 nike

考虑以下:

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可以重载 +运算符,并相加。

最佳答案

以为我会发布我的答案,我分配了类(class) 'IAddable'到两个 R6 原型(prototype)(有点像其他语言中的接口(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

关于R, R6 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com