【发布时间】:2016-02-06 12:15:47
【问题描述】:
我正在 R 中试验 S4 类,我试图为我的对象定义一个加号 (+) 运算符,即重载加号运算符。我设法重载二进制+,但我不知道如何重载一元加号。这是我想要实现的最小工作(一元运算符不工作)示例:
setClass("HWtest",
representation(expr = "character"),
prototype = list(expr = NA_character_)
)
H <- new("HWtest", expr="Hello")
W <- new("HWtest", expr="World")
setMethod("+", signature(e1="HWtest", e2="HWtest"),
function(e1,e2){
new("HWtest",
expr = paste(e1@expr," + ",e2@expr))
}
)
现在我可以使用+ 操作符,并且运行顺畅:
H+W
An object of class "HWtest"
Slot "expr":
[1] "Hello + World"
现在一元加号当然不起作用,所以必须重载
+H
Error in +H : invalid argument to unary operator
所以我尝试通过以下方式重载它:
setMethod("+", signature(e="HWtest"),
function(e){
new("HWtest",
expr = paste("+ ",e@expr))
}
)
但这会产生错误:
Error in match.call(fun, fcall) :
argument 1 matches multiple formal arguments
一元加号可以超载吗?如果是这样,对于这个最小的示例,我将如何做?
【问题讨论】:
标签: r operator-overloading s4 unary-operator