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

Единственное неудобство в том, что вам нужна вложенная копия, если вы не используете библиотеку "Объектив" или изменяемый парсер.

Другие вопросы по тегам