[#38724] 祝日判定用メソッド — Take_tk <ggb03124@...>

たけ(tk)です

19 messages 2003/11/02

[#38756] ruby-dev summary 21730-21822 /draft — Minero Aoki <aamine@...>

青木です。

14 messages 2003/11/05

[ruby-list:38837] Re: new with module

From: "NAKAMURA, Hiroshi" <nakahiro@...>
Date: 2003-11-26 05:53:07 UTC
List: ruby-list #38837
なひです。

> From: "TAKAI Naoto" <takai@commentout.com>
> Sent: Friday, November 21, 2003 1:09 PM

> > 使う側でなく、module側で
> > include Instanciableしなきゃいけないので、既存のモジュールには
> > 使いづらいですが。。。
> 
> Moduleクラスのincludeメソッドをpublicにするというのはいかがでしょうか?

globalな変更になるのが気にならなければ、スマートですね。

ちなみにinstance_evalを使えば、blockのselfをすり替えられるのでした。

module Instanciable
  def self.included(mod)
    class << mod
      def new(&b)
        o = Object.new
        o.extend(self)
        o.instance_eval(&b)
        o
      end
    end
  end
end

module Helloable; include Instanciable
  def hello
    p say_hello
  end
end

obj = Helloable.new {
  def say_hello
    "custom hello"
  end
}

obj.hello

しかし、Module.newとaModule.newで意味が違うことになってしまうので、
使わないほうがいいと思います。

たぶん、

def new_with_mod(mod, &b)
  o = Object.new
  o.extend(mod)
  o.instance_eval(&b)
  o
end

obj = new_with_mod(Helloable) {
  def say_hello
    "custom hello2"
  end
}

obj.hello

ってのが現実的かな。^^;

In This Thread

Prev Next