Forum: Ruby global rb_funcall

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
=?ISO-8859-1?Q?Simon_Kr=F6ger?= (Guest)
on 2005-12-27 00:30
(Received via mailing list)
Hi,

i'm embedding ruby into a C++, how do i call _global_ functions from C?

like

   rb_funcall2(??, rb_intern("test"), 0, NULL);

thanks

Simon
Eero S. (Guest)
on 2005-12-27 00:55
=?ISO-8859-1?Q?Simon_Kr=F6ger?= wrote:
> Hi,
>
> i'm embedding ruby into a C++, how do i call _global_ functions from C?
>
> like
>
>    rb_funcall2(??, rb_intern("test"), 0, NULL);
>
> thanks

All of the global methods become singleton methods of
the top-level Object object, so you should be able to
refer to rb_cObject (I am unable to test). If that
does not work, see if README.EXT provides any clues.

> Simon


E
=?UTF-8?B?U2ltb24gS3LDtmdlcg==?= (Guest)
on 2005-12-27 01:36
(Received via mailing list)
Eero S. wrote:
>>thanks
>
>
> E
>

I was thinking of that possibility and dismissed the thought because
"thats the class, not the object..". Well, from time to time my past
trips me up.

Thanks !

Simon
nobuyoshi nakada (Guest)
on 2005-12-27 05:52
(Received via mailing list)
Hi,

At Tue, 27 Dec 2005 07:55:32 +0900,
Eero S. wrote in [ruby-talk:172589]:
> refer to rb_cObject (I am unable to test). If that
> does not work, see if README.EXT provides any clues.

They are private instance methods of Object.

  $ ruby -e 'def foo;end; p Object.private_instance_methods.grep(/foo/)'
  ["foo"]

So the receiver is not a matter,

  rb_funcall2(Qnil, rb_intern("test"), 0, NULL);
  rb_funcall2(INT2FIX(999), rb_intern("test"), 0, NULL);
  rb_funcall2(rb_cArray, rb_intern("test"), 0, NULL);
  rb_funcall2(rb_str_new(0, 0), rb_intern("test"), 0, NULL);
  rb_funcall2(rb_ary_new(), rb_intern("test"), 0, NULL);
  rb_funcall2(rb_hash_new(), rb_intern("test"), 0, NULL);
  rb_funcall2(rb_module_new(), rb_intern("test"), 0, NULL);

all work.
This topic is locked and can not be replied to.