[#37021] [RAA] RAA/2.3 — "U.Nakamura" <usa@...>

みなさんこんにちは。

20 messages 2003/01/30

[ruby-list:36991] Re: create class function from Module

From: "NAKAMURA, Hiroshi" <nahi@...>
Date: 2003-01-25 01:48:38 UTC
List: ruby-list #36991
なひです。

> From: "Oliver M. Bolzer" <oliver@gol.com>
> Sent: Saturday, January 25, 2003 12:50 AM

> モジュールのincludeによって、クラスにクラスメソッドとクラス変数を追加す
> るにはどうするか、で悩んでます。

これだけ(クラスをいじりたいだけ)だと単にextendすればいいような
気がしますが(クラス変数は用途がちょっと微妙ですが)、

> # 野望は既存のクラスに include Persistableとするだけで、勝手に
> # トランザクション対応でDBに保存される、というものです。

クラスとインスタンス両方をいじりたいのかな、と思ってみたりして。
とすると、includeとextendの両方が要りそうです。
で、両方の手間を省くには、1.8だとModule#includedとかいうのがあるので、
こんな感じにもできます。

ちなみにRuby界にはすでにrdoというacronymが居ますので、
なにか別の名前を考えないといけないかもしれません。
http://www.ruby-lang.org/raa/list.rhtml?name=rdo

require 'sha1'

module Serializable
  module SerializableClassSupport
    def serialVersionUID
      SHA1.hexdigest(self.class.name)
    end
  end

  def self.included(klass_or_module)
    if klass_or_module.is_a?(Class)
      klass_or_module.extend(SerializableClassSupport)
    end
  end

private

  def readObject(io); end
  def writeObject(io); end
end

class Foo; include Serializable
end

o = Foo.new
if o.is_a?(Serializable)
  p o.class.serialVersionUID
end



In This Thread