«前の日記(2005年02月17日) 最新 次の日記(2005年02月19日)» 編集

Matzにっき


2005年02月18日 [長年日記]

_ [Ruby] 関数呼出し

しばらく原稿に追われてRubyをいじる暇がなかったので、 反動としてRubyについて考えてみる。こういう時間が一番充実しているような気がする。

関数とレコードをベースにオブジェクト指向プログラミングをエミュレートするPythonと違い、 オブジェクト指向プログラミングによって関数をエミュレートするRubyでは、 lambdaはあっても、呼び出しが格好悪い

f = lambda{|x| p x}
f.call(12)

と「.call」が必要だからだ。気持ちとしては

f = lambda{|x| p x}
f(12)

と書きたいものだ。そこで

  • 関数的呼出しの関数名部分がローカル変数のときには、そのローカル変数の値に「call」メソッドを適用する

というルールを導入するのはどうだろうか。以前にも同じようなことを考えたのだが、

  • 「call」ではなく「()」という特殊メソッドを適用していた
  • 「foo.bar(12)」なども「foo.bar().call(12)」に適用できることを考えた

こともあり、あまりうまくいかなかった。 今回の条件であるローカル変数があるかないかならコンパイル時に判断できるので、 実害は少ないような気がする。

欠点はローカル変数名と同じ名前の手続きが呼べなくなることだ。 通常あまり問題になることはなさそうだが「p」のような重複しやすいものもあるしなあ。

なにか回避策を用意すべきだろうか。

_ [Ruby] Look at me, I’m a Signal!

Ruby流DIコンテナNeedleの開発者であるJamis Buckが5年間プログラマーとして働いたBYUを辞めて、 Ruby on Railsを開発したDHHの 37signalsに転職するという話。

在宅で仕事をするらしいのだが、 アメリカのプログラマの流動性を感じさせる一件。 また、Rubyが人の人生を変えるのを見るとなんとも言えない気持ちになる。

彼の成功を祈る。


«前の日記(2005年02月17日) 最新 次の日記(2005年02月19日)» 編集