【发布时间】: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',它将不再是文字。 (续) -
..文字显然可以很大,因此检查哈希中的多个键可能会变得非常耗时。因此,我假设一个红宝石僧侣只是在沙子上画了一条任意线。顺便说一句,我没有提交答案,因为我的(继续)评论只是猜测。顺便说一句,在写这篇文章的时候,我的键盘上覆盖着微小的、彩色的雪花,尽管它们确实很快融化了。有没有其他人遇到过这个问题?