Class.forNameはどう書くのか
Class.forNameはどう書くのか
例えばJavaでJDBCドライバーを利用するとき
各DBごとに実装されたドライバーを利用するに当たって
下のような書き方をします。
http://www.site-cooler.com/java/jdbc/index.htm
同じように、Rubyで多態性(ポリモーフィズム)を利用して
実行ロジックを切り替えたいときにはどうすればよいのか。
この用に書けばよいようです。
eval("ClassName")
さらにJavaなら
instance = (iNterFace) Class.forName("ClassName").newInstance();
と書くところは
instance = eval("ClassName").new
と書けばよいようです。
下のサイトが参考になりました。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/9677
evalはどうやらコンパイラの機能なのですが
うまく利用すればきちんと使えるようです。
http://ja.wikipedia.org/wiki/Eval
なお、指定したクラスが存在しないときには
つまりJavaの"ClassNotFoundException"と対応するものとして
"NameError"というエラーが発生します。