From: KUBO Takehiro Date: 2009-07-13T01:17:47+09:00 Subject: Re: c extension, classes and subclasses Hi, On Fri, Jul 10, 2009 at 1:42 AM, Rolando Abarca wrote: > I have a few doubts about how the init mechanism in ruby1.9 (I'm working > with it right now) works. I have a some classes and subclasses, all defined > inside a ruby extension, the base class defines it's +new+ method like this: > > rb_define_singleton_method(rb_cMyClass, "new", rb_cMyClass_s_new, -1); Defining a singleton method "new" is old style which had been used for ruby 1.6 or before. > Does rb_obj_call_init calls the superclass' new method? No, rb_obj_call_init just calls the instance method 'initialize'. > Is this The Right Way(tm) to define/initialise classes and subclasses? 1. Register a function to allocate a memory region by rb_define_alloc_func(rb_cMyClass, ...). 2. Define "initialize" method to initialize the memory region by rb_define_method(rb_cMyClass, "initialize", ...). It is called by MyClass.new after allocating the memory. 3. Define "initialize_copy" method also for MyClass#dup and MyClass#clone. They don't call "initialize".