From: Paul Brannan Date: 2007-09-12T23:10:59+09:00 Subject: lambda arguments in an extension In an extension, how do I differentiate between: lambda().call() and: lambda().call(nil) Here's some sample code that demonstrates the problem: [pbrannan@zaphod tmp]$ cat test.rb require 'test.so' foo() [pbrannan@zaphod tmp]$ cat test.c #include "ruby.h" VALUE iter(VALUE obj) { VALUE l = rb_funcall(rb_cObject, rb_intern("lambda"), 0); rb_funcall(l, rb_intern("call"), 0); rb_funcall(l, rb_intern("call"), 1, Qnil); rb_funcall(l, rb_intern("call"), 1, INT2NUM(42)); } VALUE body(VALUE obj, VALUE data) { rb_p(obj); return Qnil; } static VALUE foo(VALUE self) { rb_iterate(RUBY_METHOD_FUNC(iter), Qnil, RUBY_METHOD_FUNC(body), Qnil); } void Init_test() { rb_define_method(rb_cObject, "foo", foo, 0); } [pbrannan@zaphod tmp]$ cat extconf.rb require 'mkmf' create_makefile('test') [pbrannan@zaphod tmp]$ ruby test.rb nil nil 42