为 AnyVal 的子类声明的 *=/+=/etc 方法到底在哪里?我假设对这些类型做了一些特殊的事情,因为作为 val 那些是无效的,但作为 var 它们很好。这只是更多的合成糖吗?我认为它正在转动
a *= 5
进入
a = a * 5
这显然失败了一个val。这种直觉正确吗?我还假设它只对 AnyVals 进行此尝试?
谢谢:)
最佳答案
你的直觉是正确的。对于any类,不只是AnyVal
的子类,如果不存在赋值方法,则a OP= b
变成 >a = 一个操作 b
。请注意,OP
,在这种情况下,必须是非字母数字字符。
这在 Scala Reference 中有描述(Scala 规范),第 6.12.4 节。
关于scala - Scala 中 AnyVal 类型(Int、Double 等)的 +=/*=/etc 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719613/