【问题标题】:Why are the "increment" and "decrement" operators not composable in Kotlin?为什么 Kotlin 中的“增量”和“减量”运算符不可组合?
【发布时间】:2021-07-02 20:28:16
【问题描述】:

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

【问题讨论】:

    标签: kotlin integer operators variable-assignment increment


    【解决方案1】:

    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 提供的这种惊喜是否更少。
    【解决方案2】:

    当您调用inc() 时,它会返回一个新的 Int,并且不会对保存原始值的属性或变量执行任何操作。当您将其用作运算符时,它被解释为也在原始属性或变量上设置返回值。从概念上讲,这不能扩展到将其用作非变量或值的运算符。

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 2019-12-03
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多