scala - 如何避免在循环中分配的 var

标签 scala loops

我正在 Scala 程序中迭代命令行输入参数,并希望在循环中设置几个变量。我的问题是我正在使用 var。

我不想为此任务使用大型库,我想保持简单。参数包含简单的键值对(如“-v myVar”),这就是我尝试使用滑动函数的原因。可能不是设置 val 的最佳选择。

object Main {
  def main(args: Array[String]): Unit = {
    // args: Array("-c", "myFile", "-j", "update", "-d", "debugPath")

    var config: String = null
    var jobType: String = null
    var debug: String = null

    args.sliding(2,2).toList.collect {
      case Array("-c", argProperty: String) => config = argProperty
      case Array("-j", argJobType: String) => jobType = argJobType
      case Array("-d", argDebug: String) => debug = argDebug
    }

    println("Config: " + config)
    println("Job type: " + jobType)
    println("Debug: " + debug)
  }
}

代码编译并提供正确的输出,但 3 个变量不是很好。但是,我找不到在循环中声明 3 个在循环外使用的 val 的解决方案。

最佳答案

此代码将您的 arg 列表转换为 Map从参数名称到值:

val argMap = args.grouped(2).collect{ case Array(k, v) => k -> v }.toMap

val config = argMap.getOrElse("-c", defaultConfig)

这避免了使用 null并允许您轻松判断是否提供了参数。

关于scala - 如何避免在循环中分配的 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56168348/

相关文章:

R - 不使用循环遍历不同的矩阵!帮忙简单一个代码

postgresql - slick 3 auto-generated - default value (timestamp) 列,如何定义 Rep[Date] 函数

android - 圆滑的 android ProguardCache 错误

java - 如何从 MultilayerPerceptronClassifier 获取分类概率?

scala - 将 RDD 拆分为没有重复值的 RDD

python - 使用循环或列表理解创建多个 pandas 数据框

javascript - 如何在 useEffect Hook 内的 setInterval 回调中调用两个函数

java - 用 vaadin 运行 scala 可以吗?

c# - 预先计算循环(或其他任何地方)中使用的常量是否有益?

java - Java 迭代对象数组