2012-03-23 77 views
4

我發現令人驚訝的是Ruby符號可以被無損地整型爲整數。 因此:a.to_i是合法的。我想知道這個整數的意義是什麼,它是該符號特有的唯一值嗎?將Ruby符號轉換爲整數

+0

':a.to_i'在'irb'和Rails控制檯中爲我引發錯誤;不知道你是如何獲得成功的。 – 2012-03-23 05:15:11

回答

11

您不應該這樣做,因爲Symbol#to_i在Ruby 1.9中被刪除,因此不會向前兼容。無論如何,docs say this about it

返回一個整數,該整數對於程序的特定執行中的每個符號是唯一的。

它大致相當於在符號上調用object_id,因爲它們最終都調用C函數SYM2ID()

+0

謝謝,安德魯。對我來說,這是繼谷歌深層鏈接:-)我要發佈一個鏈接到http://corelib.rubyonrails.org/classes/Symbol.html,這表明to_i作爲活蹦亂跳的危險的教訓。該頁面(甚至是URL)沒有提到它是Ruby 1.8.4(!)doc。更少的是* Ruby * doc,而不是ROR(如URL所示)。你必須去根目錄並看看標題才能看到該網站適用於Ruby 1.8.4!所以,吸取教訓;當在Google中遵循深層文檔鏈接時,請確保您知道您正在查看的文檔的版本。 – 2012-03-23 05:33:52

3

在1.8.x符號是直接的對象。他們的實施很快,而且大部分時間都很短。但是由於缺乏垃圾回收,出現了一個安全問題。

#to_i#to_int方法返回一個唯一的整數且均與內部實現。

1.9.x中的符號即時語言和隱式和顯式整數轉換都已被刪除。你當然可以得到object_id。有趣的是,在1.8.x中,to_iobject_id沒有返回相同的數字。

相關問題