From: Nobuyoshi Nakada Date: 2008-09-01T10:16:45+09:00 Subject: [ruby-core:18430] Re: how to create a block with a block parameter in C? Hi, At Thu, 28 Aug 2008 05:30:07 +0900, Paul Brannan wrote in [ruby-core:18404]: > > Why don't you use rb_define_method() instead of calling "define_method"? > > > > "define_method" is desgined for "ruby level", not for C level. > > IIRC because rb_define_method takes a function pointer, not a Ruby > block or Proc. Although I can't get your point, but this would equal to your example. $ cat foo.c #include "ruby.h" VALUE foo(int argc, VALUE *argv, VALUE self) { VALUE x, b; rb_scan_args(argc, argv, "01&", &x, &b); rb_p(x); rb_p(b); return Qnil; } void Init_foo() { VALUE cFoo = rb_define_class("Foo", rb_cObject); rb_define_method(cFoo, "foo", foo, -1); } $ ruby -r./foo -e 'Foo.new.foo(42) { 8 }' 42 # -- Nobu Nakada