kiyoka.2009_05_13 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2009_05
45555555555555555555555555555555555555555555
4

[Ruby][Nendo] Rubyのメソッドはファーストクラスオブジェクトだった

5

Yuguiさんのエントリーより引用

5
 ファーストクラスオブジェクトとしてのメソッド - 世界線航跡蔵EXT
5
 やー、Rubyのメソッドはファーストクラスですよ。返り値にできて、変数に格
5
 納して演算できて、引数にできるという意味では。
5
 確かに、RubyはPythonやJavaScriptやSchemeに比べると高階関数を陽に使うプ
5
 ログラミング*1 は不格好になる。Pythonなら簡単なのに、
5
   bound_function = obj.hoge
5
   bound_function(arg1, arg2, arg3)
5
 Rubyは余計なメソッド呼び出しがくっついて不格好だ。
5
   method = obj.method(:hoge)
5
   method.call(arg1, arg2, arg3)
5
 私もこの点が気にくわなくてまつもとさんに「メソッドがファーストクラスだっ
5
 たらいいのに」と言ったことがある。でも、まつもとさんの考えではすでに
5
 ファーストクラスということだった。
5

 

5
 名前空間
5
 もう細かいところは記憶が定かでないので、以下は私の理解になる。メソッド
5
 はただ、名前空間が違うんだ。
5
 既存のメソッドと同名の識別子に値を代入すると、それはローカル変数の初期
5
 化になる。けれども、メソッド呼び出しでは依然として元のメソッドを参照す
5
 る。
5
   p = 1
5
   p p #=> 1
5

 

5

Matzさんのブログより引用

5
 Matzにっき(2008-02-01)EXT
5
 Lisp-1とLisp-2
5
 ここで説明もなくLisp-1とかLisp-2とか書いたが、そういえば日本語であまり
5
 この用語を見たことがないので補足しておく。
5
 基本的に名前空間が一つしかないLispのことをLisp-1と呼ぶ。たとえばSchemeがそう。
5
 (略)
5
 Lisp-1とLisp2の区別はLisp以外のプログラミング言語でも存在する。たとえ
5
 ば、PythonやJavaScriptはLisp-1であり、 RubyはLisp-2である。
5

ということで、RubyはLisp-2だから識別子に入れた手続きを呼びだすために callメソッドがが容易されているという理解。

5

 

5

これが分かれば、NendoからRubyのメソッドを呼びだす文法が正しく定義できそうだ。

5

もうちょっとでメソッドと識別子に登録されたProcオブジェクトは全く別物だと勘違いするところだった。

5

 

5

こういうエントリーもある。

5
 Rubyの呼び出し可能オブジェクトの比較(1) - 世界線航跡蔵EXT
5

Nendoの開発にはドンピシャの情報。Yuguiさんすばらしい。ありがたや。

5

 

5

...comment disabled...