http://d.hatena.ne.jp/m-hiyama/20060317/1142559097
に共感を覚えつつ。 Ruby って Kernel#String とか定義してあるのね。 require 'complex' すると Kernel#Complex とかも組み込まれる、と。まぁ必要なクラスだけ定義するのが正解なんだろうけど、これって別に言語レベルでシンタックスシュガーにしてくれてもいいレベルな気もするなーと思った。あとついでにライブラリで実現できるようなものを作ってみた。
def method_missing(name, *args) if (name.to_s =~ /^[A-Z]/) Kernel.const_get(name).send(:new, *args) else super(*args) end end if __FILE__ == $0 p Time.new p Time() p File('ctor.rb', 'r') end
使わなさそう。
あと id:sumim さんのコメント (http://d.hatena.ne.jp/m-hiyama/20060317/1142559097#c1142565271) を見て C++ も operator , のオーバーロードでキテることやってたよなとか。
http://www.codeproject.com/vcpp/stl/PGIL.asp
map<string,int> m; set_map( m ) += "fish", 1, string( "horse" ), 2; set_map( m ) = "cow", 1;
すてき。