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

ruby – 为什么uniq!如果没有重复,返回零

发布时间:2020-12-16 21:55:51 所属栏目:百科 来源:网络整理
导读:我只是从 Ruby开始,我个人发现以下是违反“最不惊奇的原则”.那就是从 the documentation引用,那个uniq! “从self中删除重复的元素,如果没有进行任何更改,那么返回nil(即没有重复的). 有人可以解释一下,这对我来说似乎完全不直观吗?这意味着,而不是通过追
我只是从 Ruby开始,我个人发现以下是违反“最不惊奇的原则”.那就是从 the documentation引用,那个uniq! “从self中删除重复的元素,如果没有进行任何更改,那么返回nil(即没有重复的).

有人可以解释一下,这对我来说似乎完全不直观吗?这意味着,而不是通过追加.uniq来编写下面的一行代码!要结束第一行,我需要写下面两行:

hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00w{2}/)
  hooks = hooks.uniq

还是我错过了一些更好的方法?

编辑:

我明白了uniq!修改其操作数.以下是我希望的更好的问题:

hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00w{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

实际上,我认为这是一个特别令人震惊的错误特征,因为它是一个众所周知的原则,当设计返回数组的方法时,应始终至少返回一个空数组,而不是零

解决方法

这是因为uniq!修改自我,如果uniq!将返回一个值,您将无法知道是否在原始对象中实际发生更改.
var = %w(green green yellow)
if var.uniq!
  # the array contained duplicate entries
else
  # nothing changed
end

在您的代码中,您可以简单地写

hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00w{2}/)
hooks.uniq!
#here hooks is already changed

如果你需要返回钩子的值,可能是因为它是最后一个方法声明

def method
  hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00w{2}/)
  hooks.uniq
end

或其他

def method
  hooks = IO.read(wt_hooks_impl_file).scan(/wt_rt_00w{2}/)
  hooks.uniq!
  hooks
end

(编辑:李大同)

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

    推荐文章
      热点阅读