加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.[]只是为了兼容性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读