2017-02-10 71 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」是一個有效的符號? –