2012-02-20 67 views
1

比方說,我有一個類Set我想是這樣的,例如是否有任何破解用自定義類覆蓋類名?

class Set 
    def initialize(new_name) 
    self.class = new_name 
    end 
end 

如果你做這樣的事情x = Set.new("Dog")x.class將返回Dog代替Set。上面的課程並不適合!

+1

你能否澄清的問題?這並不完全清楚你想要做什麼。 – Amr 2012-02-20 15:43:07

+0

對於你在Ruby中創建的任何類,當你嘗試'Class.class'時,它返回'Class'吧?我想用自定義一個覆蓋類! 'c = Cat.new(「liza」)''c.class''返回'Cat' – amrnt 2012-02-20 15:53:13

+0

從'#class'方法得到一個不同的名字,或者你期望從其他類重寫類中獲得其他名稱?你希望你的對象在作業後成爲不同類的實例嗎?順便說一句,可能這不關我的事,但爲什麼? – 2012-02-20 15:54:18

回答

2

我想通了!這應該工作;)

class Obj 
    def initialize(name) 
    @klass = Object.const_set(name.capitalize, Class.new()).new() 
    end 
end 

試試看:

dog = Obj.new("dog") 
dog.class #=> Dog 
dog.class.name #=> "Dog"