Hi.
How can I call Ruby function from C with block?
E. g.
VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);
WBR, Peter Zotov
Hi.
How can I call Ruby function from C with block?
E. g.
VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);
WBR, Peter Zotov
Peter Zotov wrote:
How can I call Ruby function from C with block?
E. g.VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);
Let me Google that for you!
Hi Peter,
Hi.
How can I call Ruby function from C with block?
You can use rb_iterate():
static VALUE
foo_i(VALUE x, VALUE dummy)
{
rb_p(x);
return Qnil;
}
static VALUE
rb_foo(VALUE self)
{
rb_yield(INT2FIX(42));
return Qnil;
}
static VALUE
call_foo(VALUE klass)
{
return rb_funcall(klass, rb_intern("foo"), 0);
}
void
Init_myclass(void)
{
VALUE klass = rb_define_class("MyClass", rb_cObject);
rb_define_singleton_method(klass, "foo", rb_foo, 0);
rb_iterate(call_foo, klass, foo_i, (VALUE)NULL);
}
Best,
Andre
On Sun, 2009-03-29 at 23:30 +0900, Peter Zotov wrote:
Quoting Phlip <phlip2005@gmail.com>:
Peter Zotov wrote:
How can I call Ruby function from C with block?
E. g.VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);Let me Google that for you!
Ehm. I meant 'what function must be in place of rb_funcall_with_block'. I _know_ how do rb_proc_new work.
WBR, Peter Zotov
I think that Phlip understood this. If you look at the results you'll find this
http://www.google.com/codesearch/p?hl=de#X2brleciKjw/trunk/devel/RubyClass.cpp&q=rb_proc_new
Which proves that his suggested search was indeed helpful.
Cheers
robert
On 29.03.2009 17:58, Peter Zotov wrote:
Quoting Phlip <phlip2005@gmail.com>:
Peter Zotov wrote:
How can I call Ruby function from C with block?
E. g.VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);Let me Google that for you!
Ehm. I meant 'what function must be in place of rb_funcall_with_block'. I _know_ how do rb_proc_new work.
Quoting "Robert Klemme" <shortcutter@googlemail.com>:
Quoting Phlip <phlip2005@gmail.com>:
Peter Zotov wrote:
How can I call Ruby function from C with block?
E. g.VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);Let me Google that for you!
Ehm. I meant 'what function must be in place of rb_funcall_with_block'. I _know_ how do rb_proc_new work.
I think that Phlip understood this. If you look at the results you'll find this
http://www.google.com/codesearch/p?hl=de#X2brleciKjw/trunk/devel/RubyClass.cpp&q=rb_proc_new
Which proves that his suggested search was indeed helpful.
It isn't. See RubyDoc:
ObjectSpace.define_finalizer(obj, aProc=proc())
Adds aProc as a finalizer, to be called after obj was destroyed.
Notice the aProc is an argument, not block.
So that code is analogue for Ruby
method(object, proc { some_code })
and I need
method(object) { some_code}
WBR, Peter Zotov
On 29.03.2009 17:58, Peter Zotov wrote:
I think that Phlip understood this.
Actually I didn't. I was just having a "let me Google CodeSearch that for you" moment... (-:
Right, stupid me. Should have looked more closely. My apologies for the unnecessary noise.
rb_iterate seems indeed the proper method:
http://www.ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html#S8
Kind regards
robert
On 29.03.2009 18:23, Peter Zotov wrote:
Quoting "Robert Klemme" <shortcutter@googlemail.com>:
On 29.03.2009 17:58, Peter Zotov wrote:
Quoting Phlip <phlip2005@gmail.com>:
Peter Zotov wrote:
How can I call Ruby function from C with block?
E. g.VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);Let me Google that for you!
Ehm. I meant 'what function must be in place of rb_funcall_with_block'. I _know_ how do rb_proc_new work.
I think that Phlip understood this. If you look at the results you'll find this
http://www.google.com/codesearch/p?hl=de#X2brleciKjw/trunk/devel/RubyClass.cpp&q=rb_proc_new
Which proves that his suggested search was indeed helpful.
It isn't. See RubyDoc:
ObjectSpace.define_finalizer(obj, aProc=proc())
Adds aProc as a finalizer, to be called after obj was destroyed.Notice the aProc is an argument, not block.
So that code is analogue for Ruby
method(object, proc { some_code })
and I need
method(object) { some_code}
Quoting "Robert Klemme" <shortcutter@googlemail.com>:
On 29.03.2009 18:23, Peter Zotov wrote:
Quoting "Robert Klemme" <shortcutter@googlemail.com>:
On 29.03.2009 17:58, Peter Zotov wrote:
Quoting Phlip <phlip2005@gmail.com>:
Peter Zotov wrote:
How can I call Ruby function from C with block?
E. g.VALUE block = rb_proc_new(...);
rb_funcall_with_block(cMyClass, rb_intern("initialize"), 0, block);Let me Google that for you!
Ehm. I meant 'what function must be in place of rb_funcall_with_block'. I _know_ how do rb_proc_new work.
I think that Phlip understood this. If you look at the results you'll find this
http://www.google.com/codesearch/p?hl=de#X2brleciKjw/trunk/devel/RubyClass.cpp&q=rb_proc_new
Which proves that his suggested search was indeed helpful.
It isn't. See RubyDoc:
ObjectSpace.define_finalizer(obj, aProc=proc())
Adds aProc as a finalizer, to be called after obj was destroyed.Notice the aProc is an argument, not block.
So that code is analogue for Ruby
method(object, proc { some_code })
and I need
method(object) { some_code}Right, stupid me. Should have looked more closely. My apologies for the unnecessary noise.
rb_iterate seems indeed the proper method:
Yes, rb_iterate is exactly what I need.
Thanks for this ruby-doc link anyway... before I analyzed sources of every un-obvious function
WBR, Peter Zotov