e$B<r0f$G$9!#e(B
Method#to_proce$B$N@bL@$H$7$F!“e(B1.9e$B$Ne(Bmethod_proc()e$B$N%=!<%9$K$O0J2<$N$h$&$Je(B
e$B%3%a%s%H$,$”$j$^$9$,!"$3$l$O<B:]$N?6$kIq$$$H$O0lCW$7$F$$$^$;$s!#e(B
/*
* class Method
* def to_proc
* proc{|*args|
* self.call(*args)
* }
* end
* end
*/
e$B0J2<$N$h$&$J%3!<%I$r<B9T$7$?$H$-!"e(B
e$B%3%a%s%H$NDL$j$N<BAu$J$i$Pe(B 1 e$B$,I=<($5$l$k$O$:$G$9$,!"e(B
e$B<B:]$K$Oe(B 0 e$B$,I=<($5$l$^$9!#e(B
def m(*args)
p args.length
end
method(:m).to_proc.call([])
e$B!!$5$5$@$G$9!#e(B
Tanaka A. wrote:
e$B$F$-$H$&$K$$$8$C$F$_$k$H!"$3$s$J46$8$G$7$g$&$+!#e(B
e$B!!9M$($F$_$?$i!"$@$$$?$$;w$?$h$&$J46$8$N%3!<%I$K$J$j$^$7$?!#e(B
e$B$?$@!“e(BC e$B%l%Y%k$K$*$1$k%V%m%C%/0z?tEO$7$K$D$$$F$O$^$H$b$K8!F$e(B
e$B$5$l$F$$$J$$$N$G!”$=$3$+$i;O$a$J$$$H!"$H$$$&46$8$,$7$^$9$,!#e(B
e$B!!$&!<$s!"3N$+$K!#e(B
In article [email protected],
Masahiro S. (e$B<r0f@/M5e(B) [email protected] writes:
e$B0J2<$N$h$&$J%3!<%I$r<B9T$7$?$H$-!"e(B
e$B%3%a%s%H$NDL$j$N<BAu$J$i$Pe(B 1 e$B$,I=<($5$l$k$O$:$G$9$,!"e(B
e$B<B:]$K$Oe(B 0 e$B$,I=<($5$l$^$9!#e(B
def m(*args)
p args.length
end
method(:m).to_proc.call([])
e$B$F$-$H$&$K$$$8$C$F$_$k$H!"$3$s$J46$8$G$7$g$&$+!#e(B
e$B$?$@!“e(BC e$B%l%Y%k$K$*$1$k%V%m%C%/0z?tEO$7$K$D$$$F$O$^$H$b$K8!F$e(B
e$B$5$l$F$$$J$$$N$G!”$=$3$+$i;O$a$J$$$H!"$H$$$&46$8$,$7$^$9$,!#e(B
Index: proc.c
— proc.c (e$B%j%S%8%g%se(B 12587)
+++ proc.c (e$B:n6H%3%T!<e(B)
@@ -1320,6 +1320,12 @@
}
static VALUE
+mlambda(VALUE method)
+{
- return rb_funcall(Qnil, rb_intern(“lambda”), 0);
+}
-
+static VALUE
bmcall(VALUE args, VALUE method)
{
volatile VALUE a;
@@ -1363,7 +1369,7 @@
* end
* end
*/
- proc = rb_iterate((VALUE (*)(VALUE))mproc, 0, bmcall, method);
- proc = rb_iterate((VALUE (*)(VALUE))mlambda, 0, bmcall, method);
return proc;
}
Index: vm.c
— vm.c (e$B%j%S%8%g%se(B 12587)
+++ vm.c (e$B:n6H%3%T!<e(B)
@@ -665,15 +665,25 @@
NODE *ifunc = (NODE *) block->iseq;
VALUE val;
VALUE arg;
- if (argc == 1) {
- arg = *argv;
- else if (argc > 1) {
- arg = rb_ary_new4(argc, argv);
-
if (argc == 1) {
-
arg = *argv;
-
}
-
else if (argc > 1) {
-
arg = rb_ary_new4(argc, argv);
-
}
-
else {
-
arg = rb_ary_new();
-
}
}
push_frame(th, 0, FRAME_MAGIC_IFUNC,