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

From: "NAKAMURA, Hiroshi" <nakahiro@...>
Date: 2003-11-20 01:19:56 UTC
List: ruby-list #38814
なひです。

Javaでですね、

    public Enumeration values() {
        return new Enumeration() {
            public boolean hasMoreElements() {
                return (current < myOriginalData.size());
            }
            public Object nextElement() {
                if (!hasMoreElements()) {
                    throw new NoSuchElementException();
                }
                final Object obj = myOriginalData.elementAt(current);
                current++;
                return obj;
            }
            private int current = 0;
        };
    }

こんなことしたりすることがあります。Enumerationというインタフェイス
を指定してObjectを生成すると。

そう頻繁に欲しくなるものではありませんが、Rubyではときどき、

  o = Object.new
  o.extend(Enumerable)
  def o.each
    myOriginalData.each do |i|
      yield(i)
    end
  end

とかしています。

これをもっとスマートにやれるような便利定義とかないでしょうか。例えば

  require 'benri'
  o = Enumerable.new do |obj|
    def obj.each
      myOriginalData.each do |i|
        yield(i)
      end
    end
  end

みたいなことができるとか。

# -talkのインタフェイス話(の利用例の一つ)になるかなと思って
# 書いてみました。

今気付いた。

  def new_with_module(mod)
    o = Object.new
    o.extend(mod)
    yield(o)
    o
  end

で充分?

In This Thread

Prev Next