irb(main):029:0> class String irb(main):030:1> alias_method :original_initialize, :initialize irb(main):031:1> def initialize(str = '') irb(main):032:2> original_initialize(str) irb(main):033:2> @double = str*2 irb(main):034:2> end irb(main):035:1> attr :double irb(main):036:1> end => nil irb(main):037:0> x = "" => "" irb(main):038:0> x.double => nil irb(main):039:0> x = String.new("hoge") => "hoge" irb(main):040:0> x.double => "hogehoge" irb(main):041:0>
呼ばれてほしい訳ではないが。
ソース見りゃ済む話だけど、要は自分で定義したクラスとかだとrb_class_new_instance()からrb_obj_call_init()が呼ばれるのだが、CレベルでStringを生成する際は大概rb_str_new2?を使用する故initializeが呼ばれぬのだよ。
ruby_1_8の話であり他は知らん。