分享 Hash string key? or symbol key?

hiveer · August 27, 2014 · Last by hiveer replied at August 28, 2014 · 4293 hits

Hash 既支持 String key,又支持 Symbol key,而且会区别对待。以下形式是合法的 {:one => 1, "one" => 1}

但是更多的时候,我们在意的是组合成 key 的字符,不是他的形式。所以,也就是说实际应用的时候,我们一般不会在一个 hash 中包含两种类型的 key。那我们如何来避免这两种类型的 key 同时出现呢?下面推荐一个方法 http://api.rubyonrails.org/classes/ActiveSupport/HashWithIndifferentAccess.html

rgb = ActiveSupport::HashWithIndifferentAccess.new
rgb[:black] = '#000000'
rgb[:black]  # => '#000000'
rgb['black'] # => '#000000'

rgb['white'] = '#FFFFFF'
rgb[:white]  # => '#FFFFFF'
rgb['white'] # => '#FFFFFF'

对于 Hash object 我们也可以很好的通过 Hash#with_indifferent_access 来扩展,快捷,方便!

略麻烦,保持统一方式一直用 symbol 呗

#1 楼 @huacnlee 嗯,对。如果个人能统一风格的话,其实这个就没有多大必要。不过,很多时候都是 coworking,所以实际开发也不好避免。对此,Rails 还有一个扩展方法Hash#with_indifferent_access,可以达到同样的效果,这个在处理 Hash 参数的时候还是挺有用的。

这么做,在某些场合作用非常大,可以避免被坑,如果你设计存储 hash 数据,希望别人访问时只要 key 相同,不论你使用 string key 还是 symbol key 都能获取同一个数据,那么就可以这么干了。

强制 Symbol 方式,团队协作必须要设定标准代码风格吧...

You need to Sign in before reply, if you don't have an account, please Sign up first.