記事を書くにあたってRubyの変数スコープを考えれば考える程気持ち悪く思えてくる。
ダイナミックスコープは慣れれば後置修飾子以外はあまり困らないんだけど、やっぱりブロック変数が気持ち悪すぎる。それから、制御構文はスコープを導入しないのにブロックは導入して、class/defに至っては外側のスコープを継承しないっていうのが気持ち悪い。
まぁ、これは関数ベースの発想に毒され過ぎなんだけど。Rubyは第一にはオブジェクト指向であって、非オブジェクト的構造化言語の性質は(Kernelモジュールとかで)シミュレートされているだけだし、関数型言語の性質はほんのり残ってるだけ。関数型っていう意味であればPythonのほうがまだ近いよね。
Rubyはクラスベースのオブジェクト指向言語なんだから、classやdefが特権的であって、そこでまったく新しいスコープが入るのはまぁ、わからんでもない。でもなー、クラス定義中のローカル変数をメソッドが参照できるとやっぱりうれしいんだけどなー。いや、define_methodとかClass.newはなしの方向で。
どうにも気持ち悪いから同じコードをとりあえずGaucheとHaskellで書いてみたらすっきりした。しばらくGaucheの人になります。