紅寶石如何讓您不明白地使用字符串或符號引用元素?這經常會讓我受不了,特別是在處理JSON時。做使用符號鍵與字符串鍵引用哈希元素
hash = {stat: bar}
允許通過hash[:stat]
的參考。以後,如果我這樣做:
hash = JSON.parse(hash.to_json)
hash[:stat]
,將返回nil
,而是我必須做hash['stat']
。這是爲什麼?這是故意的,如果是這樣,爲什麼?
紅寶石如何讓您不明白地使用字符串或符號引用元素?這經常會讓我受不了,特別是在處理JSON時。做使用符號鍵與字符串鍵引用哈希元素
hash = {stat: bar}
允許通過hash[:stat]
的參考。以後,如果我這樣做:
hash = JSON.parse(hash.to_json)
hash[:stat]
,將返回nil
,而是我必須做hash['stat']
。這是爲什麼?這是故意的,如果是這樣,爲什麼?
符號被解析爲json的字符串,但解析爲哈希的json會將其視爲字符串。如果你要使用它,最好是凍結字符串而不是使用符號。
哈希將關鍵對象映射到值對象。如果將值對象與關鍵對象關聯,則可以通過該關鍵對象檢索它。如果您將某個值與不同的鍵對象關聯,則可以通過該不同的鍵對象檢索該值。傳遞一個關鍵對象並獲取不同關鍵對象的值是錯誤的。
舉個例子,下面的哈希:
hsh = {:foo => 42, 'foo' => 23, [:foo] => :bar, ['foo'] => :baz}
你會如何檢索或者42
或23
如果僅僅紅寶石不管三七二十一開始了完全不同的鍵返回值?
如果您確實想要使用其中一種,您可以安裝ActiveSupport gem,並使用它的'HashWithIndiferentAccess'。 – Amadan
當然這是故意的。爲什麼如果Ruby不區分它們,首先會有字符串和符號? – sawa