【问题标题】:how can I write increment in Scala? [duplicate]如何在 Scala 中编写增量? [复制]
【发布时间】:2023-03-22 18:26:01
【问题描述】:

有没有办法可以在 Scala 中编写这个 Java 代码:

int foo () { return this.i++; }

除了:

def foo : int = { 
  val t = this.i 
  this.i += 1
  t
}

【问题讨论】:

  • 只用 var 代替 val
  • @Pavel i 已经是 var ,否则代码将不起作用。据我所知,将t 设置为var 不会改变任何东西,所以我不确定这会有什么帮助。
  • 你应该避免在 scala 中使用“增量”方法,尝试将其实现为函数等
  • 不要使用可变成员

标签: scala


【解决方案1】:

不,没有。 Scala 没有等效于 Java 的后缀自增运算符。

您的代码是获得相同行为的正确方法(假设您确实需要它)。

【讨论】:

    【解决方案2】:

    当然:def foo = copy(i = i+1) ;)

    不要使用可变变量,它们是邪恶的。 scala 中 99% 的实际代码不需要可变状态,因此,您应该假装在 scala 中根本没有 var 关键字,直到您对语言概念足够熟悉以能够分辨出使用时可变变量实际上是个好主意。

    【讨论】:

    • 不应该是def foo = (i, copy(i = i+1))吗?您编写它的方式根本不会保留返回 i 的旧值和给 i 一个新值的行为。
    • @sepp2k 好吧,美妙的是你不需要旧值,因为原始实例没有改变,所以如果你想知道值在递增之前是什么(并且不要就像出于某种原因从数字中减去一个;)),您可以只查看原始实例。
    • 很公平,但这意味着您的答案根本不能反映 OP 想要后缀增量而不是前缀增量的行为这一事实。 OP 的方法将用于其副作用和返回值。您的方法模拟副作用,但不是返回值。所以我只是认为你的回答与所提出的问题没有太大关系。
    • 我的回答与所提出的问题有很大关系:它解释了如何正确将有问题的java代码翻译成scala。
    • 如果原始 Java 代码是 int foo () { return ++this.i; } 甚至是 void foo() { ++this.i; },您的答案将完全相同。但是,如果那是原始的 Java 代码,那么 OP 一开始就不必问这个问题。问题的重点是后缀增量的行为,而您的问题根本没有解决这个问题。所以就我而言,你错过了问题的重点。是的,我知道在很多情况下避免突变在 Scala 中是更可取的,但这不是问题,你也不知道这是其中一种情况。
    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2020-07-31
    • 2020-07-31
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多