我希望能够用一个符号来做到这一点
variable1 = :hello
variable2 = variable1.dup
但该dup
方法不适用于符号。符号有等效的方法吗?
你不能,给定符号的一个实例永远存在。这就像尝试做一样不可能42.dup
。
您可以看到,通过这个简单的代码片段,您总是会为一个符号获得相同的对象:
Array.new(1000) { :foo.object_id }.uniq.size #=> 1
与字符串(您可以dup
)相比:
Array.new(1000) { 'foo'.object_id }.uniq.size #=> 1000
符号是不可复制的,一个符号应该只有一个实例。
两个相同内容的符号是同一个实体,可以通过.object_id
.
符号是不可变的。因此,复制它们是没有意义的。因此,这被设计为不可能。