在 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 值。