Scala的+=在Int上下文中定义在哪里?

问题描述 投票:0回答:2

刚开始使用 Scala

var c = 0

c += 1
作品
c.+=
给我
error: value += is not a member of Int

+=
在哪里定义的?

scala operators
2个回答
9
投票

Scala 语言规范 (SLS) 的第 6.12.4 节赋值运算符 解释了此类复合赋值运算符是如何脱糖的:

l ω= r

(其中

ω
是除
<
>
!
之外的任何运算符字符序列,并且不以
=
开头)被脱糖为

l.ω=(r)

IFF

l
有一个名为
ω=
的成员,或者可以隐式转换为一个具有名为
ω=
的成员的对象。

否则,它会被脱糖为

l = l.ω(r)

(除了

l
保证只被评估一次),如果类型检查。

或者,更简单地说:编译器将首先尝试

l.ω=(r)
,如果这不起作用,它将尝试
l = l.ω(r)
.

这允许像

+=
这样的东西像在其他语言中一样工作,但仍然被覆盖以做不同的事情。


2
投票

实际上,您描述的代码确实有效。

scala> var c = 4
c: Int = 4

scala> c.+=(2)  // no output because assignment is not an expression

scala> c
res1: Int = 6

我怀疑(但不能肯定地说)它无法在库中找到,因为编译器将其去除(重写)为

c = c.+(1)
在库中

© www.soinside.com 2019 - 2024. All rights reserved.