From: Ayumu Aizawa Date: 2008-12-04T21:38:29+09:00 Subject: [ruby-list:45694] Re: クラスメソッド るびきちさん、中村(う)さん、そして松田さんどうもありがとうございます。 松田さんの助言どおりactive_support/inflector.rbを読んでみてなんとなく 理解できたのですが、やっぱりまだまだRubyを良くわかってないのか、 (たぶん)超基本的な疑問があります。 constantize(camel_cased_word) というメソッドがActiveSupportによってObjectクラスに追加されているのはわかるんですけど このメソッドシグネチャ(あまりRubyでは馴染みがない響きの言葉ですが...)によると このメソッドはひとつの引数をとることになっています。 ところが実際に動かしてみると引数ではなくて、このメソッドのレシーバー(Stringクラスのインスタンス) が引数として渡されたかのような振る舞いをしています。 2008/12/04 19:09 松田 明 : > どうも。松田です。 > >>> 派生した質問なのですが、最初の河村さんの例のようにクラスではなくクラス名の文字列から >>> そのクラスのインスタンスを取得することもできるのでしょうか。 >>> 自分に思いつくのはevalくらいですがもうちょっとスマートな解があれば教えて下さい。 >> >> Module#const_getをどうぞ。 >> ただし、これはネストした定数には対応していないのでイディオムを使います。 > > 相澤さんはきっとRailsアプリな環境に違いないと思うので、 > Rails厨的な別解をば。 > >>> "XClass".constantize > => XClass > >>> "Test::Unit".constantize > => Test::Unit > >>> "x_class".camelize.constantize > => XClass > >>> "x_classes".classify.constantize > => XClass > > ふつうのconst_getと何がちがうの? > というあたりについては、 > active_support/inflector.rb > のソースをご覧ください。 > > -- > Akira Matsuda > > >