OptionParser を難しいと思ったことはないなあ。 getopts からの移行だったから、むしろ嬉しいことのほうが多かった。 嬉しさのあまりツールはほとんど optparse に移行しちゃったし。 具体的にはこのくらい。
~ % grep -l optparse c/*/*.rb c/*/bin/*.rb | wc -l 55 ~ % grep -l getopts c/bin/*.rb c/*/bin/*.rb | wc -l 7
on てメソッドも Gtk の on_click と大差ないので違和感はない。 強いて言うなら on の引数がよくわかんないな。 いろいろ条件 (制約値?) が書けるみたいなんだけど、 何が書けるのかいまだに知らない (知ろうとしていない)。
optparse で嬉しかったことと言えば、 ヘルプメッセージをオプションとまとめて書けるようになったこと。 getopts ではヘルプメッセージを自分で書かなきゃいけないのが面倒でしかたがなかった。 あと、--help のときは stdout に出したいんだけどエラーのときは stderr に出したい。これも getopts だとめんどくさい。 optparse だと普通に書ける。
しかし困っていることもないではない。
num = nil # ← これがめんどくさい parser = OptionParser.new parser.on('-c NUM') {|n| # ちなみにここで |num| とやる方法は嫌い num = n }
def usage(parser, msg) $stderr.puts msg $stderr.puts parser exit 1 end
とかいう場合。 でも、parser の特異メソッドにすりゃ済むなあと今さら気付いた。
def parser.usage(msg) $stderr.puts msg $stderr.puts help() exit 1 end
こういうメソッドが最初から定義されてると嬉しいのだが。
ちなみに getoptlong は可能なかぎり使いたくない。 1.6 から 1.9 のすべてで警告なしで使えるのが getoptlong だけというのは実に腹立たしいことだ。 ReFe ではやむをえず getoptlong を使っているのだが、 あまりにムカついたのでラップして使ってる。
(21:31)
http://www.rubyist.net/~nobu/t/20050925.html#p01
* [ruby] $INSTALLFILES make の時点で *.rb を作ってインストールするには、 $INSTALLFILES = [["hoge.rb", "$(RUBYLIBDIR)"]] インストールするファイル名(のglobパターン)、インストール先のディレクトリ、 インストールする元のファイル名から取り除くprefix、をeachでyieldするもの。
ああ、やっぱりあるんですね……。 今度このシチュエーションに出会ったら使います。
(21:39)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.