我正在尝试重载通用 S3 加法函数+和乘法函数*。
到目前为止,我成功地重载了所有 Ops(操作员)功能。
foo <- structure(list(value = 1, txt = 'a'), class = 'foo')
Ops.foo <- function(e1,e2){
structure(list(value = e1$value * e2$value,
txt = paste(e1$txt, e2$txt)),
class = 'foo')
}
foo + foo # value = 1, txt = "a a"
Run Code Online (Sandbox Code Playgroud)
但是,我找不到如何单独执行乘法(*)运算符的加(+)操作。我希望行为有所不同,具体取决于我是否添加或乘以新班级。
我已经尝试过以下方法:
+.foo <- function(e1,e2){
structure(list(value = e1$value * e2$value,
txt = paste(e1$txt, e2$txt)),
class = 'foo')
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,说 .foo 不存在:'+.foo <- function(e1, e2) { 中的错误:找不到对象'.foo''
我也尝试过使用 UseMethod() 但这似乎只适用于 S4 类。
如何重载这些特定的 (+, *) 通用 S3 函数?
干得好
foo <- structure(list(value = 1, txt = 'a'), class = 'foo')
`+.foo` <- function(leftfoo, rightfoo) { return (paste(leftfoo$txt, rightfoo$txt)) }
Run Code Online (Sandbox Code Playgroud)
运行它会产生
> foo + foo
[1] "a a"
Run Code Online (Sandbox Code Playgroud)