[#1381] bound method — shugo@... (Shugo Maeda)

前田です。

21 messages 1998/02/04
[#1383] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#1384] Re: bound method — keiju@... (石塚圭樹 ) 1998/02/05

けいじゅ@日本ラショナルソフトウェアです.

[#1385] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#1387] Re: bound method — keiju@... (石塚圭樹 ) 1998/02/05

けいじゅ@日本ラショナルソフトウェアです.

[#1388] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#1389] Re: bound method — keiju@... (石塚圭樹 ) 1998/02/05

けいじゅ@日本ラショナルソフトウェアです.

[#1396] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/06

まつもと ゆきひろです

[#1410] GD — Masao Kanemitsu <masao-k@...>

30 messages 1998/02/10
[#1411] Re: GD — matz@... (Yukihiro Matsumoto) 1998/02/10

まつもと ゆきひろです

[#1413] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1417] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/10

<199802100623.PAA03533@eban.ase.ptg.sony.co.jp> の、

[#1420] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1426] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/10

<199802100733.QAA04028@eban.ase.ptg.sony.co.jp> の、

[#1428] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1429] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/10

<199802100757.QAA04212@eban.ase.ptg.sony.co.jp> の、

[#1431] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1434] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/12

<199802100952.SAA04346@eban.ase.ptg.sony.co.jp> の、

[#1435] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/12

わたなべです.

[#1436] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/12

<199802120449.NAA00398@eban.ase.ptg.sony.co.jp> の、

[ruby-dev:1463] iterator block passing (Re: rgrep)

From: shugo@... (Shugo Maeda)
Date: 1998-02-16 05:38:11 UTC
List: ruby-dev #1463
前田です。

In message "[ruby-list:6423] Re: rgrep (Re: call for scripts)"
Yukihiro Matsumoto <matz@netlab.co.jp> wrote:

|イテレータブロックをそのまま引き渡す
|
|  {|x| yield x}
|
|の代わりになる記号があれば良いのだろうと思うのですが,なかな
|か良いのが思い付きません.
|
|  foreach_files(path) xxx
|
|のxxxの部分に来るいかにもそれらしいもの(出来れば予約語でない
|方が望ましいが,予約語でも良い)が,あれば良いのですが….

なかなか良い記号や名前はなさそうですね。

文法拡張はせずに、

obj.pass_block(:itername, args...)

というメソッドを用意する、というのはどうでしょう。


-- 
前田 修吾

Attachments (1)

eval.c.diff (1.12 KB, text/x-diff)
--- eval.c.orig	Mon Feb 16 12:18:24 1998
+++ eval.c	Mon Feb 16 12:29:27 1998
@@ -3396,6 +3396,35 @@
     return vid;
 }
 
+static VALUE
+f_pass_block(argc, argv, recv)
+    int argc;
+    VALUE *argv;
+    VALUE recv;
+{
+    VALUE vid;
+    ID mid;
+
+    if (argc == 0) ArgError("no iterator name given");
+    if (iterator_p())
+	ArgError("iterator block given to pass_block");
+    if (!f_iterator_p())
+	ArgError("pass_block called out of iterator");
+
+    vid = argv[0]; argc--; argv++;
+    if (TYPE(vid) == T_STRING) {
+	mid = rb_intern(RSTRING(vid)->ptr);
+    }
+    else {
+	mid = NUM2INT(vid);
+    }
+    PUSH_ITER(ITER_PRE);
+    vid = rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1);
+    POP_ITER();
+
+    return vid;
+}
+
 #include <varargs.h>
 
 VALUE
@@ -4248,6 +4277,7 @@
     rb_define_global_function("global_variables", f_global_variables, 0);
 
     rb_define_method(mKernel, "send", f_send, -1);
+    rb_define_method(mKernel, "pass_block", f_pass_block, -1);
     rb_define_method(mKernel, "instance_eval", obj_instance_eval, 1);
 
     rb_define_private_method(cModule, "append_features", mod_append_features, 1);

In This Thread

Prev Next