On 9/6/06, Saumya Dikshit <saumzyster / gmail.com> wrote: > Just to clarify, "rb_load_file" and "ruby_run" will execute the ruby script. > But incase, there are more than one singleon methods defined in the script > and I want to call only one of them. > > If I have a "test.rb" > > def good > puts 'I am gud' > end > > def bad > puts 'I am bad' > end > I want to include one of these methods from C code. > Since executing a script in this case will simply > Do nothing as I have defined singletons here. > How do I acheve It. I beleive that this will work, none of this actually tested. First, they're not singleton methods, methods defined at the top level are private instance methods of class Object. So you need to have a receiver, but any object will do, say nil. As far as I can tell the rb_funcall function doesn't check whether or not a method is private, but this might change in future versions of ruby. So something like this might work to call the good method. rb_funcall(Qnil, rb_intern("good"), 0) if you instead made these class methods of a class: class TestClass def TestClass.good puts 'I am gud' end def TestClass.bad puts 'I am bad' end end Then in your C code you could do something like this (again untested): VALUE test_class = rb_const_get(rb_cObject, rb_intern("TestClass")); rb_funcall(test_class, rb_intern("good"), 0, 0) The last two arguments to rb_funcall are the number of arguments and an array of the VALUEs of the arguments, since the count is 0 we can use 0 for the array. And if you made the methods instance methods: class TestClass def good puts 'I am gud' end def bad puts 'I am bad' end end Then your C code might look something like this (once again untested): VALUE test_class = rb_const_get(rb_cObject, rb_intern("TestClass")); VALUE test_instance = rb_class_new_instance(0,0,test_class) rb_funcall(test_instance, rb_intern("good"), 0, 0) similarly here, the first two arguments of rb_class_new_instance are the argument count and argument array for the initialize method. -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/