Scala中的AnyVal类型(Int,Double等)上的+ =/*=/etc运算符

Jac*_*vis 3 scala

究竟是为AnyVal的子类声明的*=/+ =/etc方法?我假设对这些类型做了一些特别的事情,因为作为一个val,它们是无效的但是作为var它们很好.这只是更多的合成糖吗?我认为它正在转变

a *= 5
Run Code Online (Sandbox Code Playgroud)

a = a * 5
Run Code Online (Sandbox Code Playgroud)

这显然不适合val.这种直觉是否正确?我还假设它只为AnyVals尝试这个?

谢谢 :)

Dan*_*ral 9

你的直觉是正确的.对于任何类,AnyVal如果赋值方法不存在,不仅仅是子类,而是a OP= b转换为a = a OP b.请注意OP,在这种情况下,必须是非字母数字字符.

这在Scala参考(Scala规范)的6.12.4节中有所描述.