[#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:38825] Re: new with module

From: "NAKAMURA, Hiroshi" <nakahiro@...>
Date: 2003-11-21 03:01:32 UTC
List: ruby-list #38825
なひです。

> From: "TAKAI Naoto" <takai@commentout.com>
> 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してということでもいいと思います。

In This Thread