我刚刚开始使用Ruby,并且我个人发现以下内容违反了“最少突击原则”。那就是从the documentation引用那个uniq! “从自身中删除重复的元素,如果没有更改,则返回nil(即没有找到重复项)。”为什么uniq!如果没有重复项,则返回nil
有人可以解释这一点,这似乎完全违反我的直觉?这意味着,不能通过追加.uniq来编写下面的一行代码!要结束第一行,我必须写下面两行:
hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00\w{2}/)
hooks = hooks.uniq
或者我错过了什么,更好的方法?
编辑:
我明白,uniq!修改其操作数。这里的问题说明更好,我希望:
hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00\w{2}/)
puts hooks.length #50
puts hooks.uniq!.length #undefined method `length' for nil:NilClass
我争辩说uniq!作品使它完全没有意义而且毫无用处。正如我指出的那样,我可以在第一行添加.uniq。然而,后来在同一个程序中,我将元素推送到循环内的另一个数组上。然后,在循环中,我想“重复”数组,但我不敢写'hooks_tested.uniq!'因为它可能返回零;代替我必须写入hooks_tested = hooks_tested.uniq
事实上,我抗衡这是一个特别严重的错误特征在于它是一个公知的原则,即,制订对返回一个数组,要时常的方法时至少返回一个空数组,而不是零
的POLS有红宝石特定的含义:“并不感到意外马茨(Ruby的创建者) – 2010-01-20 15:22:19
无用的(不正确)的用途时,你试图把它同意方便,如果。你正在尝试做些什么 - 例如 - 测试'uniq!'的结果。这可能是马茨想到的。 ;-) – 2010-01-20 17:26:55
我同意。这是非常类似PHP的(随机的,不协调的例外情况)。所有其他情况下,包括'uniq'都会返回原来的情况。当'uniq'找不到重复项时,它会返回数组本身。严重跆拳道。 – ahnbizcad 2016-09-07 21:45:44