>>>>> "R" == Robert Feldt <feldt / ce.chalmers.se> writes:

R> # I want to do this in C:
R> # class Sub<Super
R> #   def inv
R> #     1.0/@a
R> #   end
R> # end

 Try something like this :

pigeon% cat sup.c
#include <ruby.h>

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
#<Sup: @a=2.0>
0.5
pigeon% 


Guy Decoux