オプションハッシュ
optionsは配列ではなく、ハッシュです。ハッシュには、それぞれ独自の特別なキーを持つオブジェクトが格納されています。あなたの場合、キーはです:flag。そのため、を呼び出すたびにoptions[:flag]、そこに保存されているものはすべて取得されます。
options = {}
これにより、空の新しいハッシュが作成されます。
オプションパーサー
最初からそれを取りましょう:あなたのコードはで始まります
optparse = OptionParser.new do|opts|
...
end
のインスタンスを作成しますOptionParser。これは、オプションの解析に役立つクラスです。このnew()メソッドは実際には、特別なRubyコマンドであるブロックを取ることができます。配列が何であるかわからない場合は、Rubyブロックはかなり特殊な言語要素であるため、Rubyブロックについてもう少し読む必要があるかもしれません。
optsとにかく、それが行うことは、スクリプトに渡された引数を処理するという名前のオブジェクトを作成することです。このオブジェクトは|opts|(パイプ内で)表示され、ブロック変数です。ブロックについて読んだことがありますか?
まず、banner()メソッドを使用してバナーを印刷するのに役立ちます。後で、on()渡された引数があったかどうかをメソッドでチェックします。
optionsまた、以前の空のハッシュがあることを忘れないでください。-fこの場合、渡されたオプションを探したいので、
opts.on( '-f', '--flag', "Flag has been set" ) do
前述のように、このon()メソッドは最初のパラメーター('-f')、またはのような代替パラメーターを探します'--flag'。説明もあります。オプションが渡された場合、オプションが渡されたかどうかを記憶したいので、以下の行が実行されます。
options[:flag] = true
これで、optionsハッシュにキーが含まれ、:flagそれが正しいことがわかりました。
注: optparse.parse!実際には、すべての解析が開始されます。このOptionParserオブジェクトは以前に作成したことがありますが、それ自体ではまだ実際には何もしていません。したがって、このメソッドは。と呼ばれparse!()ます。感嘆符は、Rubyでいくつかのメソッドに使用するのが好きなものです。あなたは時々それに出くわすでしょう。とにかく、電話しないとparse!何も起こりません。これは、Rubyのオプションパーサーを構築する方法です。
オプションの確認
これで、スクリプトの最後で、optionsオプションパーサーが以前にすべてを解析したため、すべてのオプションがハッシュ内にあると想定します。キーの要素:flagがtrueに設定されているかどうかを確認してください。
if options[:flag] == true
そして出来上がり!重要==:コードを2倍忘れました!比較したいのですが、を使用すると=、何があってもキーがtrueに設定されます。==したがって、条件式には必要であり、必要ではないことを覚えておいてください=。
注:そこにある鍵を探すこともできたはずです。以前はハッシュが空だったため、キーがまったくありませんでした。オプション-fが解析された後、ハッシュにはキーが含まれていました:flag。したがって、明らかに唯一の値である値を探す代わりにtrue、キーを探すことができます。
if options.key?(:flag)
# => the flag was set
end
さらにオプションを追加する
例のメソッドと同じように、on()別のメソッドを追加できます。たとえば、ハッシュに別のキーを使用することを忘れないでください:execute。
opts.on( '-x', '--execute', "Do something!" ) do
options[:execute] = true
end