2


假设我有许多称为 modeA modeB common 的选项组。我将在 {} 中引用这些 - 即 {common} 扩展到该组中描述的任何选项。

我希望能够执行以下命令行

command A {common} {modeA}
command B {common} {modeB}

模式和公共组中选项的位置并不重要,可以交织在一起
以下将失败

command A {modeB}    /* Wrong option group for this mode */
command A B          /* A and B not allowed */

因此,目标是

  • 一个必须出现并且是集合 A|B 之一的选项
    • 如果可能,强制成为第一个参数
  • 根据上述强制参数,整个组被解析为 Ok 或被忽略
4

2 回答 2

0

不是一个优雅的解决方案,但是...
将选项分成至少三组,modeA/modeB 的选项和其他选项。其他包含帮助和模式选项。对模式使用自定义验证器来限制选项(使用默认值)然后

  • 合并所有组并解析
  • 操作 --help 如果需要(解释所有模式/选项)
  • 确定模式
  • 制作新的组组合,忽略不需要的模式并重新解析

我觉得必须有一个更圆滑的方式

于 2011-02-04T11:01:52.200 回答
0

我也在努力实现这一点,我能想到的最好的就是

  1. 首先解析“核心”选项,但允许无法识别的选项
  2. 确定模式
  3. 通过 collect_unrecognized 收集无法识别的选项
  4. 根据不允许无法识别的模式选项解析无法识别的选项(如果在模式 A 中使用模式 B 选项,则会触发错误)
于 2013-05-26T23:46:12.473 回答