iRSSの日記

はてなダイアリーiRSSの日記の続き

クラス内のメソッドの存在をチェックするには?

Ruby on Railsのように、GETのURLのパスから、特定のクラスのメソッドを呼ぶフレームワークを考えています。
Catalystでいいじゃん...という考えもありますが、怒濤のようなCPANモジュール依存でインストールに困りそうなので、
モデル:DBI + ビュー:TT + コントローラ:[軽量独自] +3者をまとめるエンジン

こんなのをつくろうとしています。

まあ、経緯はおいといて、今日はまっていたのは、
「あるメソッドがそのクラスで使えるかどうかを調べるには」
ということでした。

can(METHOD)
canはオブジェクトがMETHODというメソッドを持っているかどう かを検査し、持っていればそのサブルーチンに対するリファレンスを返 し、持っていなければundefを返します。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlobj.html

↑そのこたえは、これ。 can(メソッド名)です。
いやー、こんなの知ってる人は当然なんだろうけど、Catalystのソースを読んで、canが怪しい事に気がつき、やっとこさ、つきとめました。


ついでにこのメソッドはUNIVERSAL パッケージにふくまれるということで、
他の全てのクラスはこのUNIVERSAL パッケージを自動的に継承するので、どのクラスでもcanメソッドは使えるという事のようです。

isa(CLASS)
isaは、オブジェクトがCLASSのサブクラスにblessされていれば trueを返します。

なあんてのもありますね。