相关疑难解决方法(0)

Scala中的运算符优先级

我喜欢Scala提出的运算符优先级,但在极少数情况下,未经修改的规则可能不方便,因为在命名方法时有限制.有没有办法为Scala中的类/文件等定义另一个规则?如果没有,将来会解决吗?

scala operator-precedence

47
推荐指数
2
解决办法
2万
查看次数

Scala - 定义自己的中缀运算符

采用单个参数的方法可以写为Scal中的中缀运算符.即添加*(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)
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用(c1 + c2).

类型不匹配,预期:字符串,实际:数组[字节]

我想也许这个问题是我使用的+,所以我交换了它,xorc1 xor c2只是导致了

无法解析符号xor

有什么建议?

UPDATE

有趣.我有一个class Fooobject Foo它下面的定义中,包含隐含的类.这导致上述错误.

但是,删除对象,而是将隐式类放入a trait BytearrayHandling然后扩展它(class Foo extends BytearrayHandling)似乎工作.这是为什么?

scala operators infix-notation infix-operator implicit-conversion

3
推荐指数
1
解决办法
2478
查看次数