为什么 "increment" 和 "decrement" 运算符在 Kotlin 中不可组合?

Why are the "increment" and "decrement" operators not composable in Kotlin?

如果我有一个 var i : Int = 0,那么 i.inc().inc() 就可以正常工作,即 inc() 可以与自身组合。那么为什么 (i++)++ 让 Kotlin 报错“Variable expected”?

当您调用 inc() 时,它 return 是一个新的 Int 并且不对 属性 或保存原始值的变量做任何事情。当您将它用作运算符时,它被解释为还在原始 属性 或变量上设置 return 值。这在概念上不能扩展到将其用作非变量或值的运算符。

The effect of computing the expression [a++] is:

  • 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.

因此,如果您尝试将 i++ 用作上面的 a 来确定 (i++)++ 的含义,它将转换为

val i1 = i++
i++ = i1.inc()
i1

当然,i++ = i1.inc()没有意义(没关系,它也会计算i++两次)。