【发布时间】:2021-07-02 20:28:16
【问题描述】:
如果我有var i : Int = 0,那么i.inc().inc() 就可以正常工作,即inc() 可以与自身组合。那为什么(i++)++ 会让 Kotlin 报错“Variable expected”呢?
【问题讨论】:
标签: kotlin integer operators variable-assignment increment
如果我有var i : Int = 0,那么i.inc().inc() 就可以正常工作,即inc() 可以与自身组合。那为什么(i++)++ 会让 Kotlin 报错“Variable expected”呢?
【问题讨论】:
标签: kotlin integer operators variable-assignment increment
The effect of computing the expression [
a++] is:
将a的初始值存储到临时存储a0中。
将a0.inc()的结果赋值给a。
返回 a0 作为表达式的结果。
因此,如果您尝试将i++ 用作上面的a 来确定@987654325@ 的含义,它将转换为
val i1 = i++
i++ = i1.inc()
i1
当然,i++ = i1.inc() 没有意义(别介意它还会计算两次 i++)。
【讨论】:
++ 不是一个纯函数:它有一个副作用(赋值)。这些小而令人不快的惊喜让我更加欣赏函数式编程。我很好奇 Scala 提供的这种惊喜是否更少。
当您调用inc() 时,它会返回一个新的 Int,并且不会对保存原始值的属性或变量执行任何操作。当您将其用作运算符时,它被解释为也在原始属性或变量上设置返回值。从概念上讲,这不能扩展到将其用作非变量或值的运算符。
【讨论】: