我剛剛開始使用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