Ruby 4.0 リファレンスマニュアル

function rb_funcall_passing_block

[edit]
VALUE rb_funcall_passing_block(VALUE recv, ID mid, int argc, const VALUE *argv)

rb_funcallv_public と同じですが、現在のメソッドが受け取ったブロックを、呼び出すメソッドのブロックとして渡します。 foo(x, y, &z) のようなメソッドが、受け取ったブロックをそのまま別のメソッドへ渡したいときに使います。

使用例
/* def foo(x, y, &z)
 *   x.open(y, &z)
 * end
 * に相当する C の関数 */
VALUE
foo_translated_into_C(VALUE self, VALUE x, VALUE y)
{
    ID open = rb_intern("open");

    return rb_funcall_passing_block(x, open, 1, &y);
}
[PARAM] recv:
メソッドのレシーバです。
[PARAM] mid:
呼び出すメソッドの名前です。
[PARAM] argc:
argv の要素数です。
[PARAM] argv:
メソッドに渡す引数の配列です。
[RETURN]
呼び出したメソッドの返り値です。
[EXCEPTION] NoMethodError:
メソッドがないとき、またはメソッドが private か protected のとき。
[EXCEPTION] Exception:
呼び出したメソッドの中で例外が発生したとき。