From: thitoshi@... (TAKAHASHI Hitoshi) Date: 2000-02-18T15:28:57+09:00 Subject: [ruby-list:20821] method object 京都大学の高橋です。 #最初は我ながらいけると思ったのですが、 #単なるゴミになっちゃったので、読み飛ばして下さい (^o^;; クラスもオブジェクトであると言うのは "everything is an object" という Ruby の特徴を表す 代表的な例ですよね。 ふと、じゃぁ、メソッドもオブジェクトにならないかな、 なんて考えちゃいました。 そもそものきっかけは、クラスやモジュールが FooClass = BarClass みたいに書けるんだから、メソッドも alias method_bar method_foo の代わりに method_bar = method_foo と書けたらいいな、と何気なく思ったことでした。 んで、メソッドをオブジェクト化すると、 private :method_foo が、 method_foo.private # シンボル云々は無視してる と書けるし、 undef method_bar は method_bar.delete でもいけるようになる。 とすると、 def method_baz(x) ... end は method_baz = Method.new { |x| ... } とも書けるようになる(あ、Proc と全く同じ書式だ)。 …ここまで書いたところで、よく見たら最初の method_bar = method_foo って、メソッド method_foo を実行して返って来るオブジェクトを ローカル変数 method_bar に代入するのと 全く区別がつかないことに気づきました (^_^;; method_foo.private も、メソッド method_foo が返すオブジェクトの private メソッドを実行するのと区別がつかないですね。 どだい無理な話だったか、、、、 ん、いや、Method#symbol を別に用意しておいて、 :hogehoge は特別にメソッドオブジェクトを表す変数だと 仕様変更しちゃって、 :method_bar = :method_foo :method_foo.private ... としちゃうとか、、、、、 でも Struct.new(...) はどうなるんだろう? あー、何か全く別の言語になるような気がして来たので もう止めます。 m(__)m ------------------------------------------------------------------- TAKAHASHI Hitoshi Experimental Nuclear and Hadronic Physics Laboratory Department of Physics, Kyoto University E-mail: thitoshi@ne.scphys.kyoto-u.ac.jp URL: http://www-nh.scphys.kyoto-u.ac.jp/~thitoshi/member.html -------------------------------------------------------------------