From: ts Date: 2000-06-08T14:12:18+02:00 Subject: [ruby-talk:03193] Re: Example of subclassing user-defined Ruby class in C? >>>>> "R" == Robert Feldt writes: R> # I want to do this in C: R> # class Sub # def inv R> # 1.0/@a R> # end R> # end Try something like this : pigeon% cat sup.c #include static VALUE sup_inv(obj) VALUE obj; { VALUE a = rb_ivar_get(obj, rb_intern("@a")); return rb_float_new(1.0 / NUM2DBL(a)); } void Init_sup() { VALUE sup_cSuper, sup_cSup; rb_require("Super"); sup_cSuper = rb_const_get(rb_cObject, rb_intern("Super")); sup_cSup = rb_define_class_under(rb_cObject, "Sup", sup_cSuper); rb_define_method(sup_cSup, "inv", sup_inv, 0); } pigeon% R> # And then start ruby eval.rb and do R> # 1. ruby> ...Write in the Super class... R> # 2. ruby> require Sub R> # 3. ruby> t = Sub.new(2.0) R> # 4. ruby> t.inv R> # 0.5 R> # ruby> pigeon% cat Super.rb class Super def initialize(val) @a = val end end pigeon% pigeon% cat b.rb #!/usr/bin/ruby require 'sup' t = Sup.new(2.0) p t p t.inv pigeon% pigeon% b.rb # 0.5 pigeon% Guy Decoux