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

sup*_*ary 7 ruby class object

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

class A
end

class B
end

a = A.new
a.class = B
Run Code Online (Sandbox Code Playgroud)

或类似的.

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

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

sep*_*p2k 7

不,这在红宝石中是不可能的.

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