我正在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个var并不是很好。但是,我找不到在循环中声明在循环外使用的3个val的解决方案。
答案 0 :(得分:5)
此代码将您的arg列表从参数名称转换为Map
:
val argMap = args.grouped(2).collect{ case Array(k, v) => k -> v }.toMap
val config = argMap.getOrElse("-c", defaultConfig)
这避免了使用null
,并且使您可以轻松判断是否提供了参数。