記事を書くにあたってRubyの変数スコープを考えれば考える程気持ち悪く思えてくる。
ダイナミックスコープは慣れれば後置修飾子以外はあまり困らないんだけど、やっぱりブロック変数が気持ち悪すぎる。それから、制御構文はスコープを導入しないのにブロックは導入して、class/defに至っては外側のスコープを継承しないっていうのが気持ち悪い。
まぁ、これは関数ベースの発想に毒され過ぎなんだけど。Rubyは第一にはオブジェクト指向であって、非オブジェクト的構造化言語の性質は(Kernelモジュールとかで)シミュレートされているだけだし、関数型言語の性質はほんのり残ってるだけ。関数型っていう意味であればPythonのほうがまだ近いよね。
Rubyはクラスベースのオブジェクト指向言語なんだから、classやdefが特権的であって、そこでまったく新しいスコープが入るのはまぁ、わからんでもない。でもなー、クラス定義中のローカル変数をメソッドが参照できるとやっぱりうれしいんだけどなー。いや、define_methodとかClass.newはなしの方向で。
どうにも気持ち悪いから同じコードをとりあえずGaucheとHaskellで書いてみたらすっきりした。しばらくGaucheの人になります。
ところで、pythonistaとかrubyistのgauche(scheme)版の単語はなんて言うんだろ?
ダイナミックスコープって?
Schemerとはいいますが、Gaucheに限ると特に呼び方がないと思います。
= Red catさん
わたしも、その言葉はあまり好きじゃありませんが、それでもそう言わざるをえないほどの違和感なのでした。
= ささださん
識別子の出現時以降で認識される非レキシカルスコープ、のつもりでした。おかしいな、どこかで使ってるのを見て、この名称で認識してたんでけれど、いま裏をあたったら、exactにこの意味で使ってる用例は見当たらない。不正確で申し訳ないです。
= ruiさん
schemerですか。ありがとうございます。
よくわからない理由により、コメントが即座には反映されないかもしれませんか゛、ボタンを押して元の画面に戻ってきたならたぶん正しく送信されています。
Ruby のことは良く分かりませんが、私ゃ yugui 姉さんの口(手 ?)から
> キモい
という単語が出てくるところは初めて見ましたよ(^^;)