class A
end
class B
end
a = A.new
a.class = B
またはそれに類するものです。
class A
end
class B
end
a = A.new
a.class = B
またはそれに類するものです。
いいえ、これはルビーの中では不可能です。
理論的には、Cエクステンション内から与えられたオブジェクトのklass
ポインタを変更することで可能ですが、これは実装固有のものであり、即時型では機能しません(つまり、例えばfixnumのクラスを変更する)、さまざまな方法で爆破する可能性があります。
単純な答えなし:
NoMethodError: undefined method `class=' for #<A:0x91a758>
全く違って見えるオブジェクトを残すようにあなたがメソッドを削除し、モジュールや、そのような中で混在させることができるしかし...
私はから変換するために必要な
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
これは 'foo'のクラスを変更しません。新しいインスタンスを作成します。 – zetetic
あなたがそれをしたいと思う理由:ビルトイン
String
クラスMyString
と呼ばれるカスタムクラスに、私は次のよう経由でそれをやりましたか? ([faq]を覚えておいてください:実際にあなたが直面している問題に基づいて**実用的で、答えることができる質問をお願いします**) – Mat何が起こると思いますか?それはクラスBのすべてのメソッドを持っていますか?なぜなら、 'a = B.new'はそうするからです。 –
以前は可能でした:http://www.oreillynet.com/ruby/blog/2007/04/ruby_code_that_will_swallow_yo.html –