【问题标题】:How to update a var inside if-statement in Scala Spark?如何在 Scala Spark 中更新 if 语句中的 var?
【发布时间】:2021-07-07 01:57:45
【问题描述】:

我有一个跟踪变量,它应该表示我们是否已经到达嵌套 if-else 语句中的某个分支。这是一个简化的例子

var varChanged = false
if(true) {
  var varChanged = true
}

varChanged //still returns false

我想在 if 语句中更新 varChanged 的值。我该怎么做呢?我不能将 if 语句用作像 var varChanged = if(..).. 这样的表达式,因为我将它用作另一个 val 的表达式,而 varChanged 只是我需要的跟踪变量。

【问题讨论】:

    标签: scala apache-spark if-statement scope var


    【解决方案1】:

    去掉内部的var关键字

    var varChanged = false
    if(true) {
      varChanged = true
    }
    

    您通过在内部范围内再次声明外部varChanged 来隐藏它。

    你真的应该尽可能避免使用vars。

    【讨论】:

    • 谢谢!在避免var 的同时,还有其他方法可以做到这一点吗?尽量避免var的原因是什么?
    • 我的意思是你的情况太琐碎了:val varChanged = true。强迫自己使用val。 alvinalexander.com/scala/… 这些是一些原因,但您也可以在其他地方阅读有关不变性的更多信息。
    • 但在我的情况下val varChanged = true 不起作用,因为我无法更新val。除了使用var 之外,还有另一种方法吗?像这样的情况或必须为 for 循环设置某种计数器的情况经常发生在我的代码中
    • 我不知道你的整个代码是什么样子的......你也不应该使用 for 循环......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2020-11-12
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2021-05-12
    • 2021-08-03
    相关资源
    最近更新 更多