【问题标题】:Why duplicate key for hash in ruby language not return Error?为什么ruby语言中哈希的重复键不返回错误?
【发布时间】:2019-08-21 20:41:17
【问题描述】:

A.以String为键的重复键

irb(main):001:0> myHash = {'a' => 'a', 'a' => 'a'}
(irb):1: warning: key "a" is duplicated and overwritten on line 1

B.以数组为键的重复键

irb(main):001:0> myHash = {[1,2,3] => [1,2,3], [1,2,3] => [4,5,6]}
=> {[1, 2, 3]=>[4, 5, 6]}

【问题讨论】:

  • 该警告是在编译时生成的。原则上,我不明白为什么不能对所有散列文字进行检查,或者就此而言,不能对所有 Ruby literal 对象进行检查。 (注意“文字”未在链接中定义。不好。)例如,{ a: [1, 'cat', ['dog', ['pig', ..10]]] } 是文字,因为它的值可以在编译时确定。相比之下,如果我用变量v 替换'ca',它将不再是文字。 (续)
  • ..文字显然可以很大,因此检查哈希中的多个键可能会变得非常耗时。因此,我假设一个红宝石僧侣只是在沙子上画了一条任意线。顺便说一句,我没有提交答案,因为我的(继续)评论只是猜测。顺便说一句,在写这篇文章的时候,我的键盘上覆盖着微小的、彩色的雪花,尽管它们确实很快融化了。有没有其他人遇到过这个问题?

标签: ruby ruby-hash


【解决方案1】:

对于重复的字符串作为键,不会抛出错误,而是警告。

在这两种情况下,重复键都会被覆盖为一个,因为这里的返回值是 {"a"=>"a"} 和 {[1, 2, 3]=>[4, 5, 6]} .

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2011-05-19
    • 2013-07-28
    • 2011-06-01
    • 2015-01-19
    • 2018-10-17
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多