2012-02-20 66 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"