为什么 "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++
两次)。
如果我有一个 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++
两次)。