我有两个类(a
和b
),我想+
为它们定义方法。对于这两个类的四种可能组合,我需要不同的方法,即:
a + a method 1
a + b method 2
b + a method 3
b + b method 4
我知道我可以使用 S4 进行多次调度,但我想知道是否有办法使用 S3 来模拟这种行为。我的方法如下:
a <- "b"
class(a) <- "a"
b <- "e"
class(b) <- "b"
Ops.a <- function(e1, e2){
if (class(e1) == "a" &
class(e2) == "a")
print("a & a")
if (class(e1) == "a" &
class(e2) == "b")
print("a & b")
if (class(e1) == "b" &
class(e2) == "a")
print("b & a")
NULL
}
a + a
a + b
b + a
所有这些都可以正常工作,但是当然没有定义以下内容。
b + b
现在为了涵盖这种情况,我添加了另一个方法定义。
Ops.b <- function(e1, e2){
if (class(e1) == "b" &
class(e2) == "b")
print("b & b")
NULL
}
这将导致b + b
工作,但现在a + b
和b + a
方法不一致,将导致错误。
> a + b
error in a + b : non-numeric argument for binary operator
additional: warning:
incompatible methods ("Ops.a", "Ops.b") for "+"
有没有办法使用 S3 正确定义所有四种情况?