-
VALUE rb_block_call(VALUE obj, ID mid, int argc, const VALUE *argv, rb_block_call_func_t proc, VALUE data2) -
objのメソッドmidを、C の関数procをブロックとして渡して呼び出します。 rb_funcallv にブロックとして関数を渡せるようにしたものです。メソッドが
使用例yieldすると、procが呼ばれます。procは第 1 引数にyieldされた値を、第 2 引数にdata2を受け取ります。複数の値がyieldされたとき、第 1 引数にはそれらを集めた Array が渡されます。個々の値は、procの第 3 引数argcと第 4 引数argvから取り出せます。VALUE my_own_iterator(RB_BLOCK_CALL_FUNC_ARGLIST(y, c)) { ID plus = rb_intern("+"); return rb_funcall(c, plus, 1, y); } VALUE my_own_method(VALUE self) { ID each = rb_intern("each"); return rb_block_call(self, each, 0, 0, my_own_iterator, self); }- [PARAM]
obj: - メソッドのレシーバです。
- [PARAM]
mid: - 呼び出すメソッドの名前です。
- [PARAM]
argc: -
argvの要素数です。 - [PARAM]
argv: - メソッドに渡す引数の配列です。
- [PARAM]
proc: - ブロックとして働く関数です。
- [PARAM]
data2: -
procの第 2 引数として渡される値です。 - [RETURN]
-
objのメソッドmidの返り値です。