2015-08-01 4 views
0

Я использую scopt с одним классом случая:scopt: Можно ли реорганизовать один Config в более мелкие конфигурации?

case class ArgsConfig(
    arg1: type1 = value1, 
    arg2: type2 = value2, 
    ... 
) 

теперь у меня есть большое количество возможных аргументов, что делает класс трудно читать. Аргументы может быть сгруппированы логически на более мелкие группы, например, аргументы дела с использованием искры и т.д.

Можно ли реорганизовать единственный Config на меньшие Configs чтобы обеспечить обработку одной командной строки эквивалентным образом к использованию один большой Config?

ответ

0

Если я вас правильно понял, вы хотите сделать следующее:

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

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

+0

Спасибо! Я попробую. Даже с вложенными копиями, это лучше, чем класс гигантского случая, который у меня есть прямо сейчас. – user2947133

 Смежные вопросы

  • Нет связанных вопросов^_^