[#13087] importing forwardable — "Akinori MUSHA" <knu@...>

 石塚さんの forwardable.rb を標準添付ライブラリにするべく、

11 messages 2001/05/02

[#13169] SizedQueue#pop causes deadlock — "Okada Jun" <yun@...>

岡田です。

18 messages 2001/05/13
[#13171] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Sun, 13 May 2001 14:11:18 +0900,

[#13176] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13177] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Mon, 14 May 2001 00:24:45 +0900,

[#13187] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13202] Re: [ruby-list:29672] Re: Enumerator — "Akinori MUSHA" <knu@...>

 ruby-dev に移ります。

26 messages 2001/05/15
[#13208] Re: [ruby-list:29672] Re: Enumerator — matz@... (Yukihiro Matsumoto) 2001/05/15

まつもと ゆきひろです

[#13259] Enumerator -- Round 2 — "Akinori MUSHA" <knu@...>

 もう一度、 Enumerable/Enumerator についてみなさんのご意見を

29 messages 2001/05/20
[#13260] Re: Enumerator -- Round 2 — matz@... (Yukihiro Matsumoto) 2001/05/20

まつもと ゆきひろです

[#13265] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 06:04:32 +0900,

[#13268] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/21

原です。

[#13270] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 15:00:11 +0900,

[#13289] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13290] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 19:02:10 +0900,

[#13291] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13293] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 20:57:02 +0900,

[#13305] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/24

原です。

[#13322] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 15:44:14 +0900,

[#13277] ext/dbm in ruby 1.7 — Kazuhiro NISHIYAMA <zn@...>

ruby 1.7のext/dbmですが、

16 messages 2001/05/21
[#13280] Re: ext/dbm in ruby 1.7 — matz@... (Yukihiro Matsumoto) 2001/05/21

まつもと ゆきひろです

[#13292] Integer("X") rescue -1 が parse error — YASUI Kentarow <kenyasui@...>

安井です。

18 messages 2001/05/22
[#13294] Re: Integer("X") rescue -1 が parse error — matz@... (Yukihiro Matsumoto) 2001/05/22

まつもと ゆきひろです

[#13295] Re: Integer("X") rescue -1 が parse error — "Akinori MUSHA" <knu@...> 2001/05/23

At Wed, 23 May 2001 08:59:50 +0900,

[#13300] 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — matz@... (Yukihiro Matsumoto) 2001/05/24

[#13304] Re: 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 14:15:04 +0900,

[#13428] mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

19 messages 2001/05/31
[#13435] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/01

なかだです。

[#13442] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/01

こんにちは、なかむら(う)です。

[#13446] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/02

こんにちは、なかむら(う)です。

[#13450] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/04

なかだです。

[ruby-dev:13325] Re: Enumerator -- Round 2

From: GOTOU Yuuzou <gotoyuzo@...>
Date: 2001-05-24 14:23:52 UTC
List: ruby-dev #13325
ごとうゆうぞうです。

In message <86pucz9cu5.wl@archon.local.idaemons.org>,
 `"Akinori MUSHA" <knu@iDaemons.org>' wrote:
> 
> 	files = Find['.'].select { |f| File.file?(f) }
> 
> などということができてとても便利になります。ユーザからは特に
> Enumerator という存在は見えませんが、ライブラリ側からすると、
> この陰の存在によって手軽に Enumerable なオブジェクトを生成して
> 返すことが可能になっています。

そう思います。似たようなことを考えていました。

> # 実は、 Enumerator の改良案を練っていたのですが、 C API 的に
> # あまりうれしさがないことと、使い方の具体例が思い浮かばない
> # ことで頓挫してしまいました。現行の提案仕様で十分かも。;)

組み込みが目標なので、もっと進めましょう ^^;
self を返しているようなイテレータはブロックをもらわない場合は、
Enumerator を返すようになれば便利だと思います。

  module Find
    alias find0 find
    def find(*path)
      if iterator?
        find0(*path){ |e| yield e }
      else
        Enumerator.new(self, :find0, *path)
      end
    end
    module_function :find 
    module_function :find0
  end

  module Enumerable
    alias each_with_index0 each_with_index
    def each_with_index
      if iterator?
        each_with_index0{ |e,i| yield(e,i) }
      else
        Enumerator.new(self, :each_with_index0)
      end
    end
  end

すると、次のようにメソッドチェーンが記述できます。

  Find::find("/tmp").each_with_index.collect{ |e,i|
    [i, e]
  }

この調子で拡張して行けば、

  1.upto(10).each_slice(2).collect{ |a| a }
  #=> [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

等も可能だし、名前もそのままでいいように思います。

# これを each_なんとか という名前のまま使っても違和感がなけれ
# ば、というのが前提ですけど。

この仕様だと、全体にばらまかなければ嬉しさが半減するのですが、
さすがに影響が大きすぎるように思います。そこで、ひとまず 
enumerator.rb で再定義して使ってみるというのはどうでしょうか。



それから、本題と外れますが、alias した関数は module_function 
し直さないと LocalJumpError になってしまうのは、仕様でしょうか?

$ cat f.rb
require 'find'
module Find
  alias find0 find
end
Find::find("/tmp")
$ ruby -v  f.rb
ruby 1.7.0 (2001-05-22) [i386-netbsd1.5U]
/usr/local/lib/ruby/1.7/find.rb:15:in `find': yield called out of block (LocalJumpError)
        from /usr/local/lib/ruby/1.7/find.rb:14:in `catch'
        from /usr/local/lib/ruby/1.7/find.rb:14:in `find'
        from f.rb:5

--
ごとうゆうぞう

In This Thread