2016-05-11 9 views
0

外部の宝石をインストールできないため、ARGVを引数として使用するプログラムを作成しました。私はこれまでやっている何をARGVを使用して引数を解析する正しい方法

はこれです:

if ARGV[0] == '-h' 
    puts "Help page" 
elsif ARGV[0] == '--example' 
    puts "Examples page" 
elsif ARGV[0] == '-t' 
    puts "Gathering intel" 
elsif ARGV[0] == '--version' 
    puts "Version mode" 
elsif ARGV[0] == '--dev-mode' 
    puts "developer mode" 
else 
    puts "Help page" 
end 

これは私には慣用的なようではありません。だから私の質問は、正しい方法は、RubyスクリプトからARGV引数を解析することですか?私はいくつかの研究を行い、ARGV.shiftなどを使用している人々を見ましたが、これはRubyの世界では「優先」ですか?

+0

このようにして、オプションのセットが本当に大きい場合は、大きなリストが表示されます。さらに、そのようなコードを維持するのは少し複雑かもしれません。 –

答えて

5

OptionParserは、おそらく複雑なパラメータリストのための正しい選択かもしれません。

あなたのコードについては、私はそのように書き換えます:各支店等

一度だけ言及putsARGV[0]をしているので、1 puts:ここ

puts case ARGV[0] 
    when '-h' then "Help page" 
    when '--example' then "Examples page" 
    ... 
    end 

が考慮さDRY原則でありますArray#shiftは、配列から要素を削除するので、空でない限り、arguments配列をループしている間は意味を持ちます。擬似コードでは、次のようになります。

while opt = ARGV.shift do 
    puts case opt 
     when '-h' then 'Help requested' 
     when '-f' 
      file = ARGV.shift # requires subsequent arg 
      # possible check for value is valid 
      do_smth_with_file file 
     ... 
     end 
end 
+0

私は 'optparser'についてすべて知っていますが、'私が外部の宝石をインストールできないために、それはあまり役に立ちません。 – 13aal

+3

'optparser'は宝石ではありません。標準のrubyライブラリにあります。あなたはそれを必要とするだけです。 – igwan

+0

「知っていること」には、それが宝石ではなく標準的な図書館であるという知識が含まれていますか? – mudasobwa

関連する問題