scala - 如何避免在循环中分配的var
问题描述
我正在迭代我的 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 的解决方案。
解决方案
此代码将您的 arg 列表转换为Map
从参数名称到值:
val argMap = args.grouped(2).collect{ case Array(k, v) => k -> v }.toMap
val config = argMap.getOrElse("-c", defaultConfig)
这避免了使用null
并允许您轻松判断是否提供了参数。
推荐阅读
- r - 如何重新排序带有刻面、翻转坐标和连续 x 轴的绘图上的离散 y 轴
- python - 如何从其他类的类中获取行文件?
- javascript - Puppeteer - 按类名计算元素
- reactjs - 如何通过 Webpack 的外部使用 CDN 导入 ReactJS Material UI?
- sql - 使用 UTF-8 SQL Server 整理 SQL_Latin1_General_CP850_BIN2 时出错
- c# - 使用 .net 核心 Web API 中的 ApplicationBuilder Map 注入自定义中间件时,不会调用默认控制器
- c# - 如何在被测试的同一个类中模拟一个方法?
- python - matplotlib 连接散点图中的点
- javascript - 如何使用(async+forloop+timeInterval)编写一个nodeJs函数通过superagent发出请求
- r - R工作室停止脚本