2

optparseを使用してコマンドライン引数を解析しようとしています。私のプログラムは次のような引数を受け入れたいと思います。

$ ./myscript.rb [options] filename

[options]パーツを簡単に管理できます。

require 'optparse'

options = { :verbose => false, :type => :html }

opts = OptionParser.new do |opts|
  opts.on('-v', '--verbose') do
    options[:verbose] = true
  end
  opts.on('-t', '--type', [:html, :css]) do |type|
    options[:type] = type
  end
end
opts.parse!(ARGV)

しかし、どうすれば入手できfilenameますか?

から手動で抽出することもできARGVますが、より良い解決策が必要です。方法がわかりません。

4

4 に答える 4

4

「parse」メソッドは、未処理の ARGV を返します。したがって、あなたの例では、ファイル名を含む1要素の配列を返します。

于 2009-04-06T13:33:29.800 に答える
1

ARGV.popだけを使用することはできません。たとえば、最後の引数が「css」の場合、ファイルであるか、-typeスイッチに属している可能性があります。

ただし、スクリプトで最後の引数をファイル名にする必要がある場合(これは、使用状況の出力で照会されます)、このような場合は発生しないはずです。スクリプトはゼロ以外で終了し、ユーザーは使用状況レポートまたはエラーを受け取る必要があります。

これで、デフォルトのファイル名を作成する場合、または最後の引数としてファイル名を必要としないがオプションのままにする場合は、最後の引数が有効なファイルであるかどうかをテストできます。その場合は期待どおりに使用し、そうでない場合はなどなしで続行します。

于 2009-07-30T15:12:20.020 に答える
0

この回答が引き続き役立つことを願っています。

Ruby には、このタイプの作業を実行できるbuilt-in変数が 1 つあります。__FILE__

puts __FILE__

ファイルの名前が出力されます。

于 2020-09-07T15:39:21.043 に答える
-1

OptionParser に送信する前に抽出するのが悪いとは思いません。理にかなっていると思います。使ったことがないからそう言うのかもしれませんOptionParserが、まぁ。

require 'optparse'

file = ARGV.pop
opts = OptionParser.new do |opts|
  # ...
end
于 2009-04-06T13:18:59.663 に答える