2013-03-13 42 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 XClass.new之間的差異?

+0

不要你的意思是「爲什麼*不*'Class.new'叫什麼名字?」? – 2013-03-14 00:10:45

+0

@AndrewMarshall是的,你是對的,修好了,謝謝。 – 2013-03-14 01:09:20

回答

3

爲了得到想要的效果,你可以使用Class#inherited

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

class XX #writes "Created XX" 
end 
+0

@很好,謝謝,但問題是爲什麼'class X'和'Class.new'之間存在不對稱? – 2013-03-13 23:00:23

+0

@AuuragUniyal這是Matz的問題;) – alex 2013-03-13 23:10:29

+0

@alex也許我應該提交一個bug :) – 2013-03-13 23:14:32