在散列中使用符號有一些煩惱。例如,我們使用的JSON gem總是從解析的任何JSON字符串中返回字符串,因此無論我們在何處引用從解碼JSON生成的哈希,都必須使用字符串和符號的組合來訪問哈希。是否可以在任何地方使用字符串,並且從不在Ruby on Rails中使用符號?
風格明智,可以通過僅使用字符串保持事物的一致性嗎?
在散列中使用符號有一些煩惱。例如,我們使用的JSON gem總是從解析的任何JSON字符串中返回字符串,因此無論我們在何處引用從解碼JSON生成的哈希,都必須使用字符串和符號的組合來訪問哈希。是否可以在任何地方使用字符串,並且從不在Ruby on Rails中使用符號?
風格明智,可以通過僅使用字符串保持事物的一致性嗎?
字符串是可變的,因此每次引用"foo"
ruby創建一個新對象。你可以通過在irb中調用"foo".object_id
來測試。另一方面,符號不是,所以每次引用:foo
時,ruby都會返回相同的對象。
關於「風格」和「一致性」,您始終可以使用hash.symbolize_keys!
作爲接收的json數據,這會將所有字符串鍵轉換爲符號。反之亦然 - hash.stringify_keys!
使它們再次成爲字符串。
沒有規定說散列鍵應該是一個符號。
在Rails中將符號作爲約定被看作是一個慣例...... Rails使得傳遞哈希大量使用允許多個參數,並且這些哈希中的鍵通常是表示它們的符號方法調用的預期/允許參數。
如果你有什麼嵌套哈希?我不認爲symbolize_keys!或stringify_keys!將更新那些 – apiary 2010-07-26 04:33:00
@apiary,編寫自己的'symbolize_keys'遞歸版本,並將其混合到'Hash'類中。 – 2010-07-26 04:52:55