在Ruby中,Array#reject的相反操作是什么?

55
似乎可能是keep_if
如果是的话,为什么不叫做keep呢?

3
看 http://www.ruby-doc.org/core-1.9.3/Array.html,似乎很清楚 keep_if 实际上是相反的(逻辑相同但将比较从 true 反转为 false)。那么这是否是关于方法名称的问题? - user684934
@bdares keep_if 的逻辑与 reject 不同。它可能与 reject! 有相同的逻辑,但并非完全相同。 - Andrew Grimm
2个回答

111
  • reject 的相反操作是 select (返回一个新的数组)
  • reject! 的相反操作是 select! (直接编辑原数组)
  • keep_if 的相反操作是 delete_if (直接编辑原数组)

2
我认为这与深思熟虑的语义有关,我认为这是正确的。假设你已经有了一组东西,“t1,t2和t3”;如果你拒绝一个子集,你会说“我拒绝t1和t2”。你不提及t3,因为它不受你的行动(拒绝)的影响:默认情况下是“保留”。但是,如果你要表达你想保留的内容,只说“我保留t1和t2”,那么t3的状态就会受到质疑:毕竟,你已经有了t1和t2,那么说你要保留它们有什么意义呢(它们已经处于默认状态“保留”),特别是你还隐含地保留了t3。通过使用“keep_if”语法,你明确表示存在一个条件(简单或复合条件)来确定哪些内容应该被保留,哪些应该被丢弃。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接