是否可以更改Ruby对象的类?

是否可以在实例化Ruby对象后更改它的类,例如:

class A end class B end a = A.new a.class = B 

或类似的。

(上面的代码没有运行,因为类是只读变量)

我知道这不可取,有点奇怪,而不是我打算做的事情,但有可能吗?

不,这在ruby中是不可能的。

理论上可以在C扩展中通过改变给定对象的klass指针,但应该注意这将完全是特定于实现的,不适用于直接类型(即你绝对不能改变类的例如,一个fixnum),并可能以各种方式爆炸。

当我需要从内置的String类转换为名为MyString的自定义类时,我通过以下方式完成:

 class MyString < String #Class body here end class String def to_MyS MyString.new self end end foo = "bar" puts foo.class #=> String foo = foo.to_MyS puts foo.class #=> MyString 

简单回答,不:

 NoMethodError: undefined method `class=' for # 

但是你可以删除方法并混合模块等,以便留下一个看起来完全不同的对象……