e$B1J0fe(B@e$BCNG=!%6e9)Bg$G$9!%e(B
e$B8=:_$Ne(B Proc
e$B%*%V%8%’%/%H$O%V%m%C%/$r<u$1<h$k$3$H$,$G$-$^$;$s$,!$e(B
e$B$3$l$r<u$1<h$k$3$H$,$G$-$k$h$&$K$9$k$3$H$OFq$7$$$G$7$g$&$+!%e(B
e$BNc$($Pe(B
def foo(a,b,c)
[a, b, c, block_given?]
end
e$B$KBP$7$F!$e(B
x = proc{|m, *args| [block_given?, m.call(*args)] }
x.call(method(:foo), 1,2,3){p 111} #=> [false, [1, 2, 3, false]]
e$B$G$O%V%m%C%/$rM?$($k$3$H$,$G$-$^$;$s!%e(B
e$B%V%m%C%/$rM?$($k$3$H$,$G$-$k$h$&$K$9$k$?$a$K$Oe(B
def bar(m, *args, &blk)
[block_given?, m.call(*args, &blk)]
end
x = method(:bar)
x.call(method(:foo), 1,2,3){p 111} #=> [true, [1, 2, 3, true]]
e$B$H$$$&$h$&$K%a%=%C%I$rDj5A$9$kI,MW$,$"$j$^$9!%e(B
proc e$B%*%V%8%’%/%H$,e(B block e$B0z?t$r<h$l$k$h$&$K$J$l$P!$e(B
x = proc{|m, *args, &blk| [block_given?, m.call(*args, &blk)] }
x.call(method(:foo), 1,2,3){p 111} #=> [true, [1, 2, 3, true]]
e$B$H$G$-$F!$M>7W$J%a%=%C%IDj5A$r$7$J$/$F:Q$`$N$G$9$,!%!%!%e(B
e$B$?$@$7$=$N>l9g!$8=>u$Ne(B
def baz
proc{|*args| [block_given?, *args]}
end
baz.call(1,2,3) #=> [false, 1, 2, 3]
baz{p 111}.call(1,2,3) #=> [true, 1, 2, 3]