From: Shugo Maeda Date: 1997-10-14T16:30:55+09:00 Subject: [ruby-list:4961] Re: mixin - singleton method inheritance, const etc... 前田です。 とりあえずこんなふうにしてみました。 append_featuresの中でevalして特異メソッドを定義するのが嫌だったので、 AttrInitMixinの中に特異メソッド用モジュールを作って、append_featuresで extendするようにしました。 module AttrInitMixin ATTR_DEFAULTS = Hash.new module SingletonMethods def attr(name, writable = FALSE, default = nil) super(name, writable) if name.instance_of? Fixnum name = name.id2name end ATTR_DEFAULTS[self] = Hash.new unless ATTR_DEFAULTS.key? self ATTR_DEFAULTS[self][name] = default end end def AttrInitMixin.append_features(klass) result = super(klass) ATTR_DEFAULTS[klass] = Hash.new klass.extend(SingletonMethods) return result end def initialize(*args) super type.ancestors.each do |klass| if ATTR_DEFAULTS.key? klass ATTR_DEFAULTS[klass].each do |name, default| eval "@#{name} = default" end end end end end --- 前田 修吾