1

我希望能够用一个符号来做到这一点

variable1 = :hello
variable2 = variable1.dup

但该dup方法不适用于符号。符号有等效的方法吗?

4

4 回答 4

3

你不能,给定符号的一个实例永远存在。这就像尝试做一样不可能42.dup

您可以看到,通过这个简单的代码片段,您总是会为一个符号获得相同的对象:

Array.new(1000) { :foo.object_id }.uniq.size  #=> 1

与字符串(您可以dup)相比:

Array.new(1000) { 'foo'.object_id }.uniq.size  #=> 1000
于 2012-09-19T02:10:53.047 回答
1

符号是不可复制的,一个符号应该只有一个实例。

于 2012-09-19T02:10:11.787 回答
1

两个相同内容的符号是同一个实体,可以通过.object_id.

于 2012-09-19T02:13:42.340 回答
1

符号是不可变的。因此,复制它们是没有意义的。因此,这被设计为不可能。

于 2012-09-19T03:06:55.753 回答