From: "NAKAMURA, Hiroshi" Date: 2003-11-26T14:53:07+09:00 Subject: [ruby-list:38837] Re: new with module なひです。 > From: "TAKAI Naoto" > 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 ってのが現実的かな。^^;