如何在Scala中将多个参数传递给单个变量

时间:2017-06-17 11:59:26

标签: scala

我需要从命令行将多个参数传递给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)
  }
}

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)
}