history

青木日記 RSS

<前の日 | この月 | 次の日>

2005-09-28

optparse

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 だと普通に書ける。

しかし困っていることもないではない。

  • オプションの引数を変数に入れたいとき、 最初にローカル変数を定義して on ブロック内で代入しないといけない。
num = nil    # ← これがめんどくさい
parser = OptionParser.new
parser.on('-c NUM') {|n|    # ちなみにここで |num| とやる方法は嫌い
  num = n
}
  • puts parser.help; exit 1 をまとめようと思って メソッドにすると parser を渡さないといけない。
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)

make の 時点で作った *.rb をインストール

http://www.rubyist.net/~nobu/t/20050925.html#p01

* [ruby] $INSTALLFILES
 
make の時点で *.rb を作ってインストールするには、
 
$INSTALLFILES = [["hoge.rb", "$(RUBYLIBDIR)"]]
 
インストールするファイル名(のglobパターン)、インストール先のディレクトリ、
インストールする元のファイル名から取り除くprefix、をeachでyieldするもの。

ああ、やっぱりあるんですね……。 今度このシチュエーションに出会ったら使います。

(21:39)

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS