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