From: Richard Dale Date: 2004-07-12T20:32:24+09:00 Subject: Re: const_missing David A. Black wrote: > Hi -- > > On Mon, 12 Jul 2004, Joel VanderWerf wrote: > >> Elias Athanasopoulos wrote: >> > Hello! >> > >> > I want to create class methods at run-time, so I use >> > Object#const_missing. But, I must to know the name of >> > the class method which was called. Is there a way to do >> > this via the Ruby C API (or in Ruby in general)? >> > >> > I.e. when the user calls Foo.bar, I need to know (inside >> > const_missing) that somebody tried to call the class >> > method 'bar' of Foo. >> >> Is this what you want? >> >> class Object >> def self.const_missing(name) >> const_set(name, kl = Class.new) >> class << kl >> def method_missing(m, *args) >> puts "tried to call #{m} in #{self}" >> end >> end >> kl >> end >> end >> >> Foo.bar # ==> tried to call bar in Foo > > *Much* cooler than my answer! :-) > Or in C: static VALUE class_method_missing(int argc, VALUE * argv, VALUE klass) { char * methodName = rb_id2name(SYM2ID(argv[0])); .... -- Richard