我发现令人惊讶的是Ruby符号可以被整合到整数中而没有错误。
所以:a.to_i
是合法的。我想知道这个整数的意义是什么,它是一个特定于该符号的唯一值吗?
答案 0 :(得分:12)
你不应该这样做,因为在Ruby 1.9中删除了Symbol#to_i
,因此不能兼容。无论如何,docs say this about it:
返回一个整数,该整数对于特定程序执行中的每个符号都是唯一的。
它大致相当于在符号上调用object_id
,因为它们最终都调用了C函数SYM2ID()
。
答案 1 :(得分:3)
在1.8.x中,符号是直接对象。它们的实施速度很快,而且大部分时间都很小。但随之而来的是关于缺乏垃圾收集的安全问题。
#to_i
和#to_int
方法返回一个唯一的整数,并与内部实现相关。
符号 - 即时符号以及隐式和显式整数转换都已在1.9.x中删除。您当然可以获得object_id
。有趣的是,1.8.x to_i
和object_id
没有返回相同的数字。