これをシンボルでできるようにしたい
variable1 = :hello
variable2 = variable1.dup
ただし、このdup
方法はシンボルでは機能しません。シンボルに同等の方法はありますか?
できません。特定のシンボルのインスタンスは 1 つしか存在しません。しようとするのと同じくらい不可能です42.dup
。
次の単純なスニペットを使用すると、シンボルに対して常に同じオブジェクトを取得できることがわかります。
Array.new(1000) { :foo.object_id }.uniq.size #=> 1
対文字列(できるdup
):
Array.new(1000) { 'foo'.object_id }.uniq.size #=> 1000
シンボルは複製できません。1 つのシンボルのインスタンスは 1 つのみにする必要があります。
同じ内容の 2 つのシンボルは同じエンティティです。 で確認できます.object_id
。
シンボルは不変です。したがって、それらを複製しても意味がありません。したがって、それができないように設計されています。