scopt: возможно ли реорганизовать один Config в меньший Config?
Я использовал scopt с одним классом дел:
case class ArgsConfig(
arg1: type1 = value1,
arg2: type2 = value2,
...
)
Теперь у меня есть большое количество возможных аргументов, которые затрудняют чтение класса. Аргументы могут быть логически сгруппированы в более мелкие группы, например, аргументы, связанные с использованием Spark и т. Д.
Можно ли провести рефакторинг сингла? Config
в меньшие Configs
чтобы разрешить обработку одной командной строки эквивалентно использованию одного большого Config
?
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()) // ...
Единственное неудобство в том, что вам нужна вложенная копия, если вы не используете библиотеку "Объектив" или изменяемый парсер.