是否可以更改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 #
但是你可以删除方法并混合模块等,以便留下一个看起来完全不同的对象……