Ruby Language
OptionParser
サーチ…
前書き
OptionParserは、 ARGV
からのコマンドラインオプションの解析に使用できます。
必須およびオプションのコマンドラインオプション
あまりにも複雑すぎるものを探しているのでなければ、コマンドラインを手で解析するのは比較的簡単です:
# Naive error checking
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2
# First item (site) is mandatory
site = ARGV.shift
ARGV.each do | id |
# Do something interesting with each of the ids
end
しかし、オプションが複雑になり始めると、 OptionParserなどのオプションパーサーを使用する必要があります。
require 'optparse'
# The actual options will be stored in this hash
options = {}
# Set up the options you are looking for
optparse = OptionParser.new do |opts|
opts.banner = "Usage: #{$0} -s NAME id ..."
opts.on("-s", "--site NAME", "Site name") do |s|
options[:site] = s
end
opts.on( '-h', '--help', 'Display this screen' ) do
puts opts
exit
end
end
# The parse! method also removes any options it finds from ARGV.
optparse.parse!
また、非破壊parse
もありますが、 ARGV
の残りの部分を使用する予定がある場合はあまり役に立ちません。
OptionParserクラスには必須の引数(この場合は--site
など)を強制する方法はありません。しかし、あなたはパーズを実行した後であなた自身のチェックをすることができますparse!
:
# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
abort(optparse.help)
end
より一般的な必須オプションハンドラについては、 この回答を参照してください。明確でない場合は、必須でないように外出しない限り、すべてのオプションはオプションです。
デフォルト値
OptionsParser
では、デフォルト値を設定するのが簡単です。オプションを保存するハッシュをあらかじめ入力しておくだけです:
options = {
:directory => ENV['HOME']
}
パーサーを定義すると、ユーザーが値を指定した場合、デフォルト値が上書きされます。
OptionParser.new do |opts|
opts.on("-d", "--directory HOME", "Directory to use") do |d|
options[:directory] = d
end
end
長い説明
場合によっては説明がかなり長くなることがあります。たとえば、 irb -h
は次の引数をリストします。
--context-mode n Set n[0-3] to method to create Binding Object,
when new workspace was created
これをサポートする方法はすぐには分かりません。ほとんどのソリューションでは、2行目以降のインデントを1行目に合わせるために調整が必要です。幸運にも、 on
メソッドは、複数の記述行を別々の引数として追加することでサポートしています。
opts.on("--context-mode n",
"Set n[0-3] to method to create Binding Object,",
"when new workspace was created") do |n|
optons[:context_mode] = n
end
オプションの説明行を追加して、オプションを完全に説明することができます。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow