Python の import as っぽいもの

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

よくわからない例だけど…。

フレームワークを作るとき、機能ごとにどのライブラリを使うのかを、設定ファイルなど外部に追い出してやって、逐次変更できるようにできたらいいかなあ、とかおもった。

別に別名つけなくてもいいよなあ。でも、もっと夢が広がりそうな機能だとおもうんだけどなあ。