From: nobuyoshi nakada Date: 2005-10-05T13:36:35+09:00 Subject: [ruby-list:41213] Re: OptionParserの使い方について なかだです。 At Wed, 5 Oct 2005 11:57:35 +0900, 岩崎 弘孝 wrote in [ruby-list:41210]: > opts=OptionParser.new("TEST",20, " ") do |opts| > opts.on("-t" ,"--test","testです"){...} > opts.on_tail("-h","--help","使い方の表示"){ > ... > } > end > > とある場合に, > > opts.on_tail 内あるいは特定のopts.onの処理を明示的に > 呼び出すにはどのようにすれば宜しいですか? > > 例えば引数なしの起動の際にopts.on_tailで定義された処理を > 実行するといった処理をイメージしています。 OptionParser自体はそういう使用法を想定していませんが、引数の チェックや変換が不要なら、 1) ブロックを作ってからopts.onに渡す show_help = nil opts=OptionParser.new("TEST",20, " ") do |opts| opts.on("-t" ,"--test","testです"){...} show_help = proc {|msg| abort "#{msg}#{opts}"} opts.on_tail("-h","--help","使い方の表示", &show_help) end show_help.call if opts.parse!(ARGV).empty? 2) OptionParser#defineでSwitchを保存しておく help_opt = nil opts=OptionParser.new("TEST",20, " ") do |opts| opts.on("-t" ,"--test","testです"){...} help_opt = opts.define_tail("-h","--help","使い方の表示") {|msg| abort "#{msg}#{opts}" } end help_opt.block.call if opts.parse!(ARGV).empty? 3) 変換が必要なら2に加えてparseを呼び出す test_opt = nil opts=OptionParser.new("TEST",20, " ") do |opts| test_opt = opts.define("-t" ,"--test","testです"){...} end opt, block, val = test_opt.parse(nil, []) block.call(val) 3は今まで考えていませんでしたが、もし必要そうならそういうメソッ ドを追加することも考えます。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦