On 10/30/06, Daniel Berger <djberg96 / gmail.com> wrote: > > Good question. I'm not sure why this code fails: > > #include <ruby.h> > > static VALUE foo_bar(){ > return rb_str_new2("hello"); > } > > void Init_foo(){ > VALUE cFoo, singleton; > > cFoo = rb_define_class("Foo", rb_cObject); > > rb_define_singleton_method(cFoo, "bar", foo_bar, 0); > > singleton = rb_const_get(rb_cObject, rb_intern("Foo")); > rb_define_alias(singleton, "baz", "bar"); > } > > When I compile and run that it fails with "undefined method `bar' for > class `Foo'" even though it clearly is defined. I can see in class.c > that rb_define_alias is just calling rb_alias from eval.c. It looks > like rb_alias handles singletons differently, but why it's not working > in the example I provided I'm not sure. > rb_define_alias only works for instance methods. rb_define_singleton_method is the same as saying class Foo class << self def bar( ) "hello" end end alias :baz :bar end That is going to fail because you have not defined a method "bar" in the Foo class. It is defined in the Foo singleton class. Does that make sense or help at all? I've got to run to a meeting, so I don't have time to work out the correct way of doing it. That's left as an exercise for the reader ;) Blessings, TwP