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

みなさんこんにちは。

20 messages 2003/01/30

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

From: "Oliver M. Bolzer" <oliver@...>
Date: 2003-01-27 15:18:50 UTC
List: ruby-list #37006
Oliverです。

土曜日はずっと蟲をワッチしてました (笑

On Sat, Jan 25, 2003 at 10:48:38AM +0900, "NAKAMURA, Hiroshi" <nahi@mwd.biglobe.ne.jp> wrote...
> なひです。
 
> クラスとインスタンス両方をいじりたいのかな、と思ってみたりして。
> とすると、includeとextendの両方が要りそうです。
> で、両方の手間を省くには、1.8だとModule#includedとかいうのがあるので、
> こんな感じにもできます。

そう、クラスとインスタンスの両方がイヂりたかったのです。
1.8に限定したくないので、なひさんとさくさんのコード
を参考にクラスをイヂる部分を別モジュールにして
append_featuresでextendしてみました。

module Foo
  module Bar
    def classfunc; end
  end

  def instfunc;end

  def self.append_features( mod )
    super
    mod.extend Bar
  end
end

class Bar; include Foo; end

p Bar.respond_to? :classfunc      #=>true
p Bar.respond_to? :instfunc       #=>false
p Bar.new.respond_to? :classfunc  #=>false
p Bar.new.respond_to? :instfunc   #=>true

なかださん指摘のクラス変数を使う事の問題は別に考えて
みます。 
 
> ちなみにRuby界にはすでにrdoというacronymが居ますので、
> なにか別の名前を考えないといけないかもしれません。
> http://www.ruby-lang.org/raa/list.rhtml?name=rdo

ぐはぁ。まんま読まれてますね。だいたいJava Data Objectsの
Ruby版みたいなのを目指してます。APIではなく、単一の
実装ですが。大学で研究実習として書いてて、使途も決まって
いるので、確実に完成させます (させなきゃヤバイ (^^))

Javaみたいにポストプロセッサなんて嫌なのでメタデータを
DBから引っ張ってきた後に、クラス自身におしえてあげる
ところでこの件にひっかかってました。

アドバイスありがとうございます。

-- 
	Oliver M. Bolzer
	oliver@gol.com

GPG (PGP) Fingerprint = 621B 52F6 2AC1 36DB 8761  018F 8786 87AD EF50 D1FF

In This Thread