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

Scala scopt:是否可以将单个配置重构为更小的配置?,scala,command-line-arguments,scopt,Scala,Command Line Arguments,Scopt,我已将scopt用于一个案例类: case class ArgsConfig( arg1: type1 = value1, arg2: type2 = value2, ... ) 我现在有大量可能的参数,这使得这个类很难阅读。参数可以在逻辑上分组为较小的组,例如,处理使用Spark等的参数 是否可以将单个配置重构为更小的配置,以便以与使用单个大型配置等效的方式处理单个命令行?如果我理解正确,您希望执行以下操作: case class SubConfig(x: Int = -1, y

我已将scopt用于一个案例类:

case class ArgsConfig(
  arg1: type1 = value1,
  arg2: type2 = value2,
  ...
)
我现在有大量可能的参数,这使得这个类很难阅读。参数可以在逻辑上分组为较小的组,例如,处理使用Spark等的参数


是否可以将单个
配置
重构为更小的
配置
,以便以与使用单个大型
配置
等效的方式处理单个命令行?

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

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()) // ...

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

谢谢!我试试看。即使使用嵌套副本,它也比我现在使用的giant case类要好。