Ruby クックブック読書会#03

10名の参加者で、ユーザインターフェイスの章を読んできた。

私は例によって読書に専念してたけど、どうもコードサンプルが色々と突っ込みどころ満載だったらしく、全体を通して活発な議論が行われていた。無垢な初心者がお手本にするには微妙な本だったりするのかもしれない。

それはそれとして、メモから今日のお持ち帰りを整理。

||= 記法

前にも聞いた気がするんだけど、全然覚えられないので、今回こそ。

@getch ||= ...

「||」の自己代入演算子ということで、

@getch = @getch || ...

と等しい。「+=」とかの同類ってことになるけど、or な条件判断が入ると。

この例だと @getch が nil だったら、... が代入される。後ろは常に評価されるわけではないらしい。

シグナル

C 言語のシグナルには 0 がないけど、ruby では特別に 0 が用意されてて「終了(EXIT)」の意味。サンプルコードでは、trap(0) {..} で実行終了時の処理をさせてるっぽい。

実行終了時の処理

実行終了時に何か処理させるには、次の3つのやり方があって、

  • trap(0){}
  • END{}
  • at_exit{}

それぞれ、trapが最初に、ENDが次に、at_exitが最後に実行される。といっても、変態な trap(0) は論外として、END もあまり使わなくて、ふつーは at_exit を使うんだそうだ。

optparse

optparse は、オプションを定義するだけでパースもヘルプ生成もやってくれてとてもいい子なんだけど、どうも rake を使い出すと optparse は捨てられてしまうようだ。rake のタスクでよくね? ってことらしい。