From: matz@... (Yukihiro Matsumoto) Date: 2000-04-25T23:19:01+09:00 Subject: [ruby-list:22118] Re: デフォルト付き attr_reader In message "[ruby-list:22115] デフォルト付き attr_reader" on 00/04/25, tnaka@brain-tokyo.com writes: | | |中島@ブレーンです。 | |attr_readerの派生バージョンを作ろうとしています。一応、目的の |ものはできたのですが、ちょっと見苦しいので、もっと良い方法があ |るような気がします。何かよい方法があれば教えてください。 module M1 def M1::append_features(klass) def klass::attr_reader_with_default(var_name, val) var_name = var_name.id2name unless var_name.kind_of?(String) module_eval <<-END Attr_default_#{var_name} = val def #{var_name} if defined? @#{var_name} @#{var_name} else Attr_default_#{var_name} end end END end end end class A1 include M1 attr_reader_with_default :v1, "A1.v1 default" attr_reader_with_default :v2, "A1.v2 default" def initialize @v2 = "A1.v2" end def test print "v1=#{v1} v2=#{v2} in A1\n" end end class A2 include M1 attr_reader_with_default :v1, "A2.v1 default" attr_reader_with_default :v2, "A2.v2 default" def initialize @v2 = "A2.v2" end def test print "v1=#{v1} v2=#{v2} in A2\n" end end A1.new.test A2.new.test