def import(feature, as={}) ret = require feature self.class.instance_eval do as.each do |(orig, dest)| c = const_get(orig) remove_const(orig) if const_defined?(orig) const_set(dest, c) end end unless as.empty? ret end import "date", :Date => :MyDate MyDate # -> MyDate Date # -> NameError: uninitialized constant Date
果たして使う機会があるのか。なんとなく、これがあるとより動的でキモイことができそうだなあとか。
# hoge.rb if $0 == __FILE__ controllers = { "python" => :Django, "ruby" => :Rails, "perl" => :Catalyst, } lang = ARGV.shift import "bindings/#{lang}", controllers[lang] => :Framework Framework.setup end # $ ruby hoge.rb ruby # -> Rails.setup # $ ruby hoge.rb perl # -> Catalyst.setup
よくわからない例だけど…。
フレームワークを作るとき、機能ごとにどのライブラリを使うのかを、設定ファイルなど外部に追い出してやって、逐次変更できるようにできたらいいかなあ、とかおもった。
別に別名つけなくてもいいよなあ。でも、もっと夢が広がりそうな機能だとおもうんだけどなあ。