在Scala中,只有一个参数的方法可以被写成中缀运算符。例如,将*(other:C) = foo(this, other)
添加到类C中,就可以使用c1 * c2
代替foo(c1,c2)。但是,有没有一种方法可以定义现有类上的中缀运算符,而又不能修改该类呢?
例如,如果我想用c1 + c2
代替xor(c1,c2)
,其中c1,c2:Array[Byte]
,我显然无法修改Array-Class。
我找到了这个并尝试了一下。
implicit class Bytearray(a1:Array[Byte]) extends Anyval {
def +(a2:Array[Byte]) = xor(a1,a2)
}
但是似乎不起作用 (c1 + c2
)。
类型不匹配,期望:String,实际:Array[Byte]
我想也许问题出在使用了 +
,所以我将其替换为 xor
,但是 c1 xor c2
只导致了
无法解析符号xor
有什么建议吗?
更新
有趣的是,我有一个定义了隐式类的 class Foo
和一个定义在其下方的 object Foo
。这导致了上述错误。
然而,删除该对象并将隐式类放入一个 trait BytearrayHandling
中,然后扩展它 (class Foo extends BytearrayHandling
) 似乎可以工作。为什么会这样呢?