【发布时间】:2019-09-20 22:52:04
【问题描述】:
我正在使用 scopt 库:https://github.com/scopt/scopt
如果我事先知道选项名称,我可以定义一个带有选项名称的案例类。如果我不知道用户将通过的选项的名称怎么办?我有什么办法可以在字典或其他东西中捕获这些选项值吗?
谢谢!
【问题讨论】:
标签: scala command-line-interface scopt
我正在使用 scopt 库:https://github.com/scopt/scopt
如果我事先知道选项名称,我可以定义一个带有选项名称的案例类。如果我不知道用户将通过的选项的名称怎么办?我有什么办法可以在字典或其他东西中捕获这些选项值吗?
谢谢!
【问题讨论】:
标签: scala command-line-interface scopt
像这样试试opt[Map[String,String]]
case class Config(args: Map[String, String] = Map())
object Hello extends App {
val parser = new scopt.OptionParser[Config]("scopt") {
head("scopt", "3.x")
opt[Map[String,String]]("args").valueName("k1=v1,k2=v2...").action( (x, c) =>
c.copy(args = x) ).text("other arguments")
}
parser.parse(args, Config()) match {
case Some(config) => println(config)
case None =>
// arguments are bad, error message will have been displayed
}
}
使用
执行run --args key1=val1,key2=val2
输出
Config(Map(key1 -> val1, key2 -> val2))
【讨论】: