From: "NAKAMURA, Hiroshi" Date: 2003-11-21T12:01:32+09:00 Subject: [ruby-list:38825] Re: new with module なひです。 > From: "TAKAI Naoto" > Sent: Thursday, November 20, 2003 8:13 PM > 再挑戦してみます。 ありがとうございます。盛り上がるネタを振るのはなかなか 難しいです。^^; > > これをもっとスマートにやれるような便利定義とかないでしょうか。 > > module Helloable > def say_hello > puts hello > end > end > > Object.new.extend(Module.new{ > include Helloable > def hello > 'Hello, World.' > end > }).say_hello > > ってのはいかがでしょうか。 大元の「スマートにやりたい」というのは、専用のクラス定義したり するのがめんどくさいし、1行で読み易く書きたい、という意図だったので、 こんな風にしてみました。使う側でなく、module側で include Instanciableしなきゃいけないので、既存のモジュールには 使いづらいですが。。。 module Instanciable def self.included(mod) class << mod def new o = Object.new o.extend(self) yield(o) o end end end end module Helloable; include Instanciable def hello p "hello" end end o = Helloable.new do |o| def o.hello p "custom hello" end end o.hello もちろんInstanciableの実装は、高井さんの例のように、 Moduleを1つnewしてということでもいいと思います。