2013-03-13 2 views
3

Я пытаюсь переопределить Class.new, чтобы я мог видеть, какие классы создаются, например.Почему не называется Class.new?

class Class 
    class << self 
    alias new_orig new 
    def new(*args) 
    obj = new_orig *args 
    print "created",obj,"\n" 
    obj 
    end 
    end 
end 

class X 
end 

Он не печатает ничего, но если я создаю класс, используя Class.new работает

puts Class.new 

created#<Class:0x8b75888> 
#<Class:0x8b75888> 

Так почему существует разница между class X и Class.new?

+0

Вы имеете в виду «почему * не *' Class.new' называется?»? –

+0

@AndrewMarshall, да, вы правы, исправлены, спасибо. –

ответ

3

Чтобы получить нужный эффект, вы можете использовать Class#inherited:

class Class 
    def inherited(subclass) 
    puts "Created #{subclass}" 
    end 
end 

class XX #writes "Created XX" 
end 
+0

@ Это приятно, спасибо, но вопрос в том, почему существует диссимметрия между «классом X» и «Class.new»? –

+0

@AnuragUniyal Это вопрос для Matz;) – alex

+0

@alex, может быть, я должен написать ошибку :) –

Смежные вопросы