Hi, Ruby is great, kudos to all who are involved.
I'm trying to embed ruby into an application, and I'm having a bit of
trouble. I want to write a function (in C) that returns a ruby object
from a class that I defined.
For example, given this ruby class:
class X
attr_reader :x, :y, :z
attr_writer :x, :y, :z
end
I want to write a C function that creates an instance of class X and
initializes it. Here is how I'd do it in ruby, but how do I do it in C?
def example
a = X.new
a.x = 111
a.y = 222
a.z = 333
return a
end
I've spent a while trying to come up with something, and most of that
time has been spent reading ruby source code, since I don't know which
API functions to call. Here is pseudo-code that is pretty close to
what I want, except for all the errors in it. :)
static VALUE
example(VALUE self)
{
VALUE type, obj;
ID id;
// lookup type of X (how?)
type = ....
//
// instantiate object of that type
// (is this the Right Way to do it?)
//
obj = rb_obj_alloc(type);
//
// initialize members of obj x,y,z
// (is this the Right Way to do it?)
//
id = rb_intern("X#x=");
rb_funcall(obj, id, 1, INT2NUM(111));
id = rb_intern("X#y=");
rb_funcall(obj, id, 1, INT2NUM(222));
id = rb_intern("X#z=");
rb_funcall(obj, id, 1, INT2NUM(333));
//
// the following is the only line in this function where I have
// confidence in what I wrote. :)
//
return obj;
}
This isn't compiled or tested, but I think it shows what I'm trying to
do (and shows how new I am to the internals of ruby.) I'm probably
doing this all wrong, but if someone could help me finish/fix the
above code such that it's equivalent to the ruby version, I'd be very
appreciative.
Many thanks for any help!
--
Chris