ruby – Hash [] vs to_h,它们是否相同,如果是这样哪个更好?
发布时间:2020-12-17 03:32:33 所属栏目:百科 来源:网络整理
导读:这些似乎是相同的.有偏好,性能差异等吗? Hash[[[:a,'foo'],[:b,'bar']]]#= {:a="foo",:b="bar"}[[:a,'bar']].to_h#= {:a="foo",:b="bar"} 解决方法 他们不一样.两者都可以采用数组: Hash[[[1,2],[3,4]]] #= {1=2,3=4}[[1,4]].to_h #= {1=2,3=4} 但除此之外
这些似乎是相同的.有偏好,性能差异等吗?
Hash[[[:a,'foo'],[:b,'bar']]] #=> {:a=>"foo",:b=>"bar"} [[:a,'bar']].to_h #=> {:a=>"foo",:b=>"bar"} 解决方法
他们不一样.两者都可以采用数组:
Hash[[[1,2],[3,4]]] #=> {1=>2,3=>4} [[1,4]].to_h #=> {1=>2,3=>4} 但除此之外,Hash.[]还有更古怪的语法.它可以直接接受元素: Hash[1,2,3,4] #=> {1=>2,3=>4} 如果您尝试介于两者之间,您会得到意想不到的结果: Hash[[1,4]] #=> {[1,2]=>[3,4]} 虽然给它奇数个元素通常会返回一个错误,这将有助于你进行调试: Hash[1,3] #=> ArgumentError: odd number of arguments for Hash 对于某些类型的元素,它将静默地返回一个空哈希(但带有警告),这将很难调试: Hash[[1,2]] #=> {} #=> warning: wrong element type Fixnum at 0 (expected array) 出于这个原因,Hash.[]很棘手.由于引入了Array#to_h,因此没有理由使用Hash.[].数组#to_h更好. Ruby开发人员不会删除Hash.[]只是为了兼容性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |