我一直在将 scopt 与单个案例类一起使用:
case class ArgsConfig(
arg1: type1 = value1,
arg2: type2 = value2,
...
)
我现在有大量可能的论点,这使得课程难以阅读。参数可以在逻辑上分组为更小的组,例如,使用 Spark 处理的参数等。
是否可以将 single 重构Config
为更小Configs
,以允许以与使用单个 large 等效的方式处理单个命令行Config
?
我一直在将 scopt 与单个案例类一起使用:
case class ArgsConfig(
arg1: type1 = value1,
arg2: type2 = value2,
...
)
我现在有大量可能的论点,这使得课程难以阅读。参数可以在逻辑上分组为更小的组,例如,使用 Spark 处理的参数等。
是否可以将 single 重构Config
为更小Configs
,以允许以与使用单个 large 等效的方式处理单个命令行Config
?
如果我理解正确,您需要执行以下操作:
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()) // ...
唯一的烦恼是您需要一个嵌套副本,除非您使用“镜头”库或可变解析器。