在 Kotlin 中,为什么可以通过 inc() 方法重新分配 val 整数的值?
In Kotlin, Why can the value of a val integer be reassigned by the inc() method?
考虑以下因素,
val x: Int = 0
val
变量无法更改,所以 x += 1
行不通
编译器说 Val cannot be reassigned
为什么 x.inc()
工作正常
不会 x.inc()
将值从 0
重新分配给 1
x.inc()
不会递增变量 x
。相反,它 returns 的值比 x
的值多 1。它不会改变 x
.
val x = 0
x.inc() // 1 is retuned, but discarded here
print(x) // still 0!
正如其 documentation 所说:
Returns this value incremented by one.
这似乎是一种非常无用的方法。好吧,这就是 Kotlin 用来为 postfix/prefix ++
运算符实现运算符重载的方法。
当您执行 a++
时,例如,会发生以下情况:
- Store the initial value of
a
to a temporary storage a0
.
- Assign the result of
a0.inc()
to a
.
- Return
a0
as the result of the expression.
在这里您可以看到如何使用 inc
的 return 值。
考虑以下因素,
val x: Int = 0
val
变量无法更改,所以 x += 1
行不通
编译器说 Val cannot be reassigned
为什么 x.inc()
工作正常
不会 x.inc()
将值从 0
重新分配给 1
x.inc()
不会递增变量 x
。相反,它 returns 的值比 x
的值多 1。它不会改变 x
.
val x = 0
x.inc() // 1 is retuned, but discarded here
print(x) // still 0!
正如其 documentation 所说:
Returns this value incremented by one.
这似乎是一种非常无用的方法。好吧,这就是 Kotlin 用来为 postfix/prefix ++
运算符实现运算符重载的方法。
当您执行 a++
时,例如,会发生以下情况:
- Store the initial value of
a
to a temporary storagea0
.- Assign the result of
a0.inc()
toa
.- Return
a0
as the result of the expression.
在这里您可以看到如何使用 inc
的 return 值。