なかだです。

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はできる。
    中田 伸悦