symbolize_key方法与rails中用于表示哈希键的其他方法的区别是什么?



使用symbolize_keys!()或deep_symbolize_keys()或deep_symbolize_keys!()等方法将字符串键转换为符号是否与使用symbolize_keys()进行相同的转换有任何不同?我问这个,因为我得到使用symbolize_keys()方法的安全警告,但如果我使用任何其他方法来做同样的事情,则不会。我用谷歌搜索了很多,但我不能找出区别是什么。

symbolize_keysdeep_symbolize_keys之间的区别是,第二个可以用于嵌套散列,而前一个不能。

例如:

hash = { 'person' => { 'name' => 'Rob', 'age' => '28' } }
hash.symbolize_keys
# => {:person=>{"name"=>"Rob", "age"=>"28"}}
hash.deep_symbolize_keys
# => {:person=>{:name=>"Rob", :age=>"28"}}

使用!是修改self的惯例。

例如:

# without bang(!), hash is not affected
hash.deep_symbolize_keys # => {:person=>{:name=>"Rob", :age=>"28"}}
hash # => {"person"=>{"name"=>"Rob", "age"=>"28"}}
# with bang(!), hash is affected
hash.deep_symbolize_keys! # => {:person=>{:name=>"Rob", :age=>"28"}}
hash # => {:person=>{:name=>"Rob", :age=>"28"}}