我需要从命令行将多个参数传递给scala程序。 第一个是数据库,第二个是表,第三个需要是一个映射,其中Map可以有1到n个组合(String,Int)。然后我的脚本会像这样执行:
$ scala script.scala dbame tablename Map((“score100”,20),(“score200”,10))
如何将该Map传递给我的脚本中的fields变量(参见下面的代码)?
val database = args.length match {
case x:Int if x>0 => args(0)
case _ => {
println("error")
System.exit(1)
}
}
val table = args.length match {
case x:Int if x>1 => args(1)
case _ => {
println("error")
System.exit(1)
}
}
val fields = args.length match {
case x:Int if x>2 => args(2)
case _ => {
println("error")
System.exit(1)
}
}
答案 0 :(得分:2)
将它们作为一个平面的参数列表传递:
scala script.scala dbame tablename score100 20 score 200 10 ...
然后你可以这样做:
val (dbname, tablename, params) = args match {
case Seq(dbname, tablename, params@_*) =>
(dbname, tablename, params.grouped(2).map(p => p.head -> p.last).toMap)
case _ => throw new IllegalArgumentException("dbname and tablename must be given)
}