2017-02-10 65 views
1

我有两个字符串。他们针对不同的表现来to_sym为什么to_sym的行为不同?

key = "awesome123xyz" 
key.to_sym #=> :awesome123xyz 

object.id #=> "589d62c016bd4d0005bccc15" 
object.id.to_sym #=> :"589d62c016bd4d0005bccc15" 

为什么object.id.to_sym的东西,在我看来就像一个String:

:"589d62c016bd4d0005bccc15" 

,而不是被这样的一个符号?:

:589d62c016bd4d0005bccc15` 
+0

我现在不能检查,但它是因为它以一个整数开始?不确定的符号可以从他们开始 –

+0

@maxple请避免留下“我猜样式”的评论。除非你确定,否则请保持沉默。 – mudasobwa

+1

@maxple:是的,'Symbols'可以以整数开头。 OP的代码甚至包含一个以符号“:”589d62c016bd4d0005bccc15“'开头的符号。 –

回答

5

因为在Ruby中:589d62c016bd4d0005bccc15不是有效的符号文字。如果你有一个字符串从整数或整数本身开始,转换为符号文字它将始终有以下形式:

'23'.to_sym 
#=> :"23" 
23.to_s.to_sym 
#=> :"23" 
+0

像我有对象ID是唯一的字母数字。我们有任何这样的规则来定义符号文字吗? –

+0

@ArunG你不能在符号中用数字开头的符号(':23')。几乎所有的东西都可以工作。 –

+0

所以:“23”是一个有效的符号? –

相关问题