scopt:是否可以将单个Config重构为较小的配置?

时间:2015-08-01 22:16:18

标签: scala command-line-arguments scopt

我一直在使用带有单个案例类的scopt:

Get-ChildItem -Path $path

我现在有大量可能的参数,这使得该类难以阅读。参数可以逻辑分组为较小的组,例如,使用Spark等的参数

是否可以将单个case class ArgsConfig( arg1: type1 = value1, arg2: type2 = value2, ... ) 重构为较小的Config以允许以与使用单个大Configs等效的方式处理单个命令行?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要执行以下操作:

case class SubConfig(x: Int = -1, y: String = "")

case class Config(sub: SubConfig = SubConfig(), z: Boolean = false)

val parser = new scopt.OptionParser[Config]("Foo") {
  opt[Int   ]('x', "ex" ) action { (v, c) => c.copy(sub = c.sub.copy(x = v)) }
  opt[String]('y', "why") action { (v, c) => c.copy(sub = c.sub.copy(y = v)) }
  opt[Unit  ]('z', "zet") action { (v, c) => c.copy(z = true) }
}
parser.parse(args, Config()) // ...

唯一的烦恼是你需要一个嵌套副本,除非你使用"镜头"库或可变解析器。