Scala 用scopt声明所需的子命令

Scala 用scopt声明所需的子命令,scala,command-line,scopt,Scala,Command Line,Scopt,我想使用scopt或类似的东西声明所需的子命令,但基于Scala 例如,我希望有以下与man git类似的概要,例如: mycli [--version] [--help] <command> [<args>] 有什么提示吗 提前感谢您的帮助 当然这有点棘手,它可能会导致很多级别的儿童选择 这是我的配置类: case class Config(cmd:String="", subcmd:String="") 这是我的解析器: val parser = new scop

我想使用scopt或类似的东西声明所需的子命令,但基于Scala

例如,我希望有以下与man git类似的概要,例如:

mycli [--version] [--help] <command> [<args>]
有什么提示吗


提前感谢您的帮助

当然这有点棘手,它可能会导致很多级别的儿童选择

这是我的配置类:

case class Config(cmd:String="", subcmd:String="")
这是我的解析器:

val parser = new scopt.OptionParser[Config]("MyCLI") {
  head("Foo")
  cmd("cmdA") action { (_, c) => c.copy(cmd = "cmdA")
  } children(
    cmd("subA1") action { (_, c) => c.copy(subcmd = "subA1")},
    cmd("subA2") action { (_, c) => c.copy(subcmd = "subA2")}
    )
  cmd("cmdB") action { (_, c) => c.copy(cmd = "cmdA")
  } children(
    cmd("subA1") action { (_, c) => c.copy(subcmd = "subA1")},
    cmd("subA2") action { (_, c) => c.copy(subcmd = "subA2")}
    )
  checkConfig { c => c match {
    case Config("", _) => failure("No command given.")
    case Config(_, "") => failure("Must Choose a subcommand.")
    case _ => success

  }}
}
我希望这有帮助。我将用密封的trait和objects替换Config.cmd。我这么做不是为了让它可以被复制

每个子命令都可以有自己的子命令,以及其他命令、选项或参数


对checkConfig的调用非常重要,否则如果没有给出任何命令,应用程序将以静默方式退出。

当然这有点棘手,它可能会导致很多级别的子选项

这是我的配置类:

case class Config(cmd:String="", subcmd:String="")
这是我的解析器:

val parser = new scopt.OptionParser[Config]("MyCLI") {
  head("Foo")
  cmd("cmdA") action { (_, c) => c.copy(cmd = "cmdA")
  } children(
    cmd("subA1") action { (_, c) => c.copy(subcmd = "subA1")},
    cmd("subA2") action { (_, c) => c.copy(subcmd = "subA2")}
    )
  cmd("cmdB") action { (_, c) => c.copy(cmd = "cmdA")
  } children(
    cmd("subA1") action { (_, c) => c.copy(subcmd = "subA1")},
    cmd("subA2") action { (_, c) => c.copy(subcmd = "subA2")}
    )
  checkConfig { c => c match {
    case Config("", _) => failure("No command given.")
    case Config(_, "") => failure("Must Choose a subcommand.")
    case _ => success

  }}
}
我希望这有帮助。我将用密封的trait和objects替换Config.cmd。我这么做不是为了让它可以被复制

每个子命令都可以有自己的子命令,以及其他命令、选项或参数


对checkConfig的调用非常重要,否则如果没有给出任何命令,应用程序将以静默方式退出。

Hi Nicholas。感谢您的帮助,但是如何调整checkConfig以使MyCLI-version或MyCLI-help不会导致错误?我添加了一个版本。。。帮助。。。就在头后面。。。。其次,如何调整showUsage消息,例如sage:MyCLI[dump | move]。。。成为圣人:MyCLI。。。因为这些是必需的?嗨,尼古拉斯。感谢您的帮助,但是如何调整checkConfig以使MyCLI-version或MyCLI-help不会导致错误?我添加了一个版本。。。帮助。。。就在头后面。。。。其次,如何调整showUsage消息,例如sage:MyCLI[dump | move]。。。成为圣人:MyCLI。。。因为这些是必需的?