2016-04-28 28 views
2

私はOptionParserを使用して引数の値を取得しようとしています。、OptionParserは入力値の代わりにブール値を返します

require 'optparse' 

options ={} 
opts = OptionParser.new do |opts| 
opts.on('-v') { |version| options[:version] = version } 
opts.on('-g') { |branch| options[:branch] = branch } 
opts.on('-f') { |full| options[:full] = full } 
opts.on('-h') { RDoc::usage } 
end.parse! 

# mandatory options 
if (options[:version] == nil) or (options[:branch] == nil) or (options[:full]== nil) then 
    puts options[:branch] 
    puts options[:version] 
    puts options[:full] 
    RDoc::usage('usage') 
end 

puts options[:branch] 

---> TRUE

任意のアイデア:代わりに、値の は、私のコードはブール値を返していますか?あなたは、あなたがそれを求めるために必要な値をキャプチャしたい場合は

答えて

3

は:

opts = OptionParser.new do |opts| 
opts.on('-v=s') { |version| options[:version] = version } 
opts.on('-g=s') { |branch| options[:branch] = branch } 
opts.on('-f=s') { |full| options[:full] = full } 
opts.on('-h') { RDoc::usage } 

=s表記は、関連する値がありますを意味します。

--versionまたは--branchのように長い形式の名前を含めることを忘れないように、人々は覚えておく必要がないので、gは「ブランチ」を意味します。

これはすべて、fantastic documentationに記載されており、お読みください。

+1

もちろん、「s」という用語は、意味のあるものに置き換える必要があります。 '-g'は 'branch'です。これらのオプション指定を使用してヘルプテキストが作成されることに注意してください。 –

+1

また、これとは別に、 'OpenStruct'はこれらのオプションを格納するのに最適です。明示的にハッシュキーを参照する必要はなく、あらかじめ属性名を指定する必要はありません( 'Struct'で必要とされるように)。 –

+0

@KeithBennett --version = versionと同じように' -v = s'あなたが好きならば、OpenStructはきれいにしておくことができますが、普通のハッシュにはまったく問題がありません。 – tadman

関連する問題