Как я могу использовать scopt в Scala, чтобы получить все оставшиеся аргументы? - PullRequest
0 голосов
/ 21 сентября 2019

Я использую библиотеку scopt: https://github.com/scopt/scopt

Я вижу, что могу определить класс case с именами опций, если я знаю их заранее.Что если я не знаю названия опций, которые пользователь передаст?Есть ли способ для меня, чтобы захватить эти значения параметра в словаре или что-то?

Спасибо!

1 Ответ

1 голос
/ 21 сентября 2019

Попробуйте 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))
...