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

私もこれを実装するために取り組んでおり、私が把握できる最善の方法は

  1. 最初に「コア」オプションを解析しますが、認識されないオプションを許可します
  2. モードを決定する
  3. collect_unrecognized を介して認識されていないオプションを収集します
  4. 認識されないオプションに対して認識されないオプションを解析し、認識されないことを許可しません (したがって、モード B オプションがモード A で使用されるとエラーが発生します)
于 2013-05-26T23:46:12.473 に答える
0

洗練された解決策ではありませんが...
オプションを少なくとも 3 つのグループ、モード A/モード B のオプションなどに分割します。その他には、ヘルプとモード オプションが含まれています。モードのカスタムバリデータを使用してオプションを制限します(デフォルトで)次に

  • すべてのグループを結合して解析する
  • アクション --help if required (すべてのモード/オプションを説明してください)
  • モードの決定
  • 不要なモードを除外して新しいグループの組み合わせを作成し、再解析します

もっとスマートな方法があるに違いないと思う

于 2011-02-04T11:01:52.200 に答える