[#4754] Now,I am starting ruby. — mamoru@... (Mamoru Matushita)

先日、初めて投稿したつもりだったのですが間違えて

14 messages 1997/10/02

[#4891] mixin - singleton method inheritance, const etc... — shugo@... (Shugo Maeda)

前田です。

13 messages 1997/10/10

[#5000] ruby 1.0-971015 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

14 messages 1997/10/15

[#5056] RubyでOODB — hisanori@...

松尾です。

20 messages 1997/10/20
[#5057] Re: RubyでOODB — matz@... (Yukihiro Matsumoto) 1997/10/20

まつもと ゆきひろです

[#5065] Re: RubyでOODB — hisanori@... 1997/10/20

松尾です。

[#5066] Re: RubyでOODB — matz@... (Yukihiro Matsumoto) 1997/10/20

まつもと ゆきひろです

[ruby-list:4961] Re: mixin - singleton method inheritance, const etc...

From: Shugo Maeda <shugo@...>
Date: 1997-10-14 07:30:55 UTC
List: ruby-list #4961
前田です。

とりあえずこんなふうにしてみました。
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

---
前田 修吾


In This Thread

Prev Next