是否可以在实例化Ruby对象后更改它的类,如:
class A
end
class B
end
a = A.new
a.class = B
Run Code Online (Sandbox Code Playgroud)
或类似的.
(上面的代码没有运行,因为类是只读变量)
我知道这不可取,有点奇怪,而不是我打算做的事情,但有可能吗?
不,这在红宝石中是不可能的.
理论上可以通过改变klass给定对象的指针在C扩展中进行,但应该注意这将完全是特定于实现的,不适用于直接类型(即你绝对不能改变例如一个fixnum),并可能以各种方式爆炸.