采用单个参数的方法可以在 Scala 中编写为中缀运算符。即添加*(other:C) = foo(this, other)
到类 C,将允许我们编写c1 * c2
而不是 foo(c1,c2)。但是有没有办法在你不能修改的现有类上定义中缀运算符?
例如,如果我想写c1 + c2
而不是xor(c1,c2)
, where 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
只会导致
无法解析符号异或
有什么建议么?
更新
有趣的。我有一个class Foo
在object Foo
它下面定义的,包含隐式类。这导致了上述错误。
但是,删除对象并将隐式类放入 atrait BytearrayHandling
然后扩展它 ( class Foo extends BytearrayHandling
) 似乎可行。这是为什么?