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