0

編集:

OptionParser を使用してコマンド ライン入力を適切に処理するコードを作成しました。私は2つの大きなヒットに直面しています。

  1. 空のスイッチ '-' を渡してもエラーにはなりません。もちろん、一部のプログラムはそれを有効と見なしますが、私のものはそうすべきではありません。
  2. このプログラムには 2 つの必須スイッチが必要ですが、1 つのスイッチを問題なく受け入れます。たとえばprogram.ruby -f foo -b bar、有効な入力であり、両方のスイッチが :REQUIRED です。ただし、スイッチを 1 つだけ指定しても問題はなく、これは望ましい動作ではありません。

最初のケースでは、これを行いました:

opts.on('-', /\A-\Z/) do
  $stderr.print "Invalid empty switch"
  exit 1
end

それは正常に動作します。しかし、これは適切な方法ですか?

2 番目のケースについては、OptionParser.new ブロック内で解決策を探しましたが、見つかりませんでした。例えば

unless options.foo && options.bar
  puts "Error."
  exit 2
end

OptionParser.new ブロックの外でそれを行うのが通常の方法ですか?

4

2 に答える 2

1

OptionParser を使用している場合は、はい、空のスイッチを明示的に禁止し、必要なパラメーターを手動で確認する必要があります。

ただし、 defunkt の gem choiceなど、オプションの解析に別のツールを使用した場合は、オプションを必須としてマークすることができ、無効なオプション (空のスイッチなど) によってヘルプが出力され、アプリケーションが終了します。場合によっては OptionParser を使用する方が理にかなっていることは理解していますが、個人的には、より便利なツールを使用することを好みます。

オプションを必須にすることは、いずれにせよ非常に簡単ですが、API の決定について熟考することをお勧めします。オプションが必要なコマンド ライン ユーティリティをいくつ知っていますか? 通常、コマンド ラインがオプションと引数に分けられているのには理由があります。前者は通常オプションで、後者は通常必須です。私はその確立された慣習に固執します。

于 2012-04-06T11:23:22.247 に答える
0

Thor(https://github.com/wycats/thor) を使用すると、問題をより効率的に解決できると思います。

于 2012-04-06T04:29:52.910 に答える