Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2013年02月26日(火)

def_initialize

23:51 | def_initialize - Going My Ruby Way を含むブックマーク はてなブックマーク - def_initialize - Going My Ruby Way def_initialize - Going My Ruby Way のブックマークコメント

Ruby 2.0 がリリースされたようですが、def_initialize なんて(多分)ありません。

まあ、ネタです。

class C1
  attr_accessor :foo

  def initialize(foo)
    @foo = foo
  end
end

は、

class C2
  attr_accessor :foo

  alias initialize foo=
end

と書けるんで、

class Module
  def def_initialize(name)
    module_eval %| attr_accessor :#{name} ; alias initialize #{name}= |
  end  
end

のようにすると(モンキーパッチって言うのかな?)、

class C3
  def_initialize :foo
end

と書けます。

以下、実行結果。

p C1.new(:hello).foo   #=> :hello
p C2.new(:hello).foo   #=> :hello
p C3.new(:hello).foo   #=> :hello

おしまい。

----

関連記事

alias による initialize 定義 - Going My Ruby Way - Rubyist