Ruby “Arrayreject!”的目的是什么在没有更改时返回'nil'?

Ruby “Arrayreject!”的目的是什么在没有更改时返回'nil'?,ruby,arrays,Ruby,Arrays,Arrayreject!与Arrayreject相比,如果接收器中的每个元素在适当位置被更改,并且在这种情况下不会更改,则返回nil,以防块计算为false: 我觉得这很奇怪。为什么Arrayreject!是设计来这样做的吗?应该退出!在这种情况下表现得像Arrayreject 我希望能够像select!这样链接方法!,拒绝还有地图!。有没有办法做到这一点?改用delete\u if?其余的东西链很好 “拒绝”的工作原理与“选择”类似,它实际上是返回一个新容器,然后只指向新容器,因为您要求!,鉴

Arrayreject!与Arrayreject相比,如果接收器中的每个元素在适当位置被更改,并且在这种情况下不会更改,则返回nil,以防块计算为false:

我觉得这很奇怪。为什么Arrayreject!是设计来这样做的吗?应该退出!在这种情况下表现得像Arrayreject

我希望能够像select!这样链接方法!,拒绝还有地图!。有没有办法做到这一点?

改用delete\u if?其余的东西链很好

“拒绝”的工作原理与“选择”类似,它实际上是返回一个新容器,然后只指向新容器,因为您要求!,鉴于,如果您正在执行此操作,请直接删除_

我同意这是不自然的,但经常发生的事情是,你写:

value = a.reject!; if value, do {something} end 
所以它返回null有点道理,因为假设没有拒绝,就不需要做任何事情。如果您希望更改某些内容,则只需使用select

是否改为使用delete\u?其余的东西链很好

“拒绝”的工作原理与“选择”类似,它实际上是返回一个新容器,然后只指向新容器,因为您要求!,鉴于,如果您正在执行此操作,请直接删除_

我同意这是不自然的,但经常发生的事情是,你写:

value = a.reject!; if value, do {something} end 
所以它返回null有点道理,因为假设没有拒绝,就不需要做任何事情。如果您希望更改某些内容,则只需使用select

我想拒绝!被设计为在不进行任何更改时返回nil,因此可以像这样很好地使用它:

candidates.reject! { |c| ... } or puts "Unable to reject any candidates."
既然拒绝!如果没有拒绝,则返回nil;如果没有拒绝,则仅运行or后面的零件

你也可以做一些类似Kasumi的回答。

我想是拒绝!被设计为在不进行任何更改时返回nil,因此可以像这样很好地使用它:

candidates.reject! { |c| ... } or puts "Unable to reject any candidates."
既然拒绝!如果没有拒绝,则返回nil;如果没有拒绝,则仅运行or后面的零件


你也可以像Kasumi的回答那样做。

相当于delete_if,从self中删除块计算结果为true的元素,但如果未做任何更改,则返回nil。@MichaelBerkowski当然会,我不是问是否会,我是问why@DhruvaSagar因为它就是这样设计的。试图猜测/证明理性通常是没有建设性的。也许有一篇关于ML的老文章讨论了设计选择。无论如何,它没有坏。不过,我可以这么说,因为它是这样工作的,你现在有办法检查它是否被改变了。如果是“truthy”返回,则在拒绝!的情况下已成功更改!。如果为nil,则不拒绝任何内容。相当于delete_If,从self中删除块计算结果为true的元素,但如果未进行任何更改,则返回nil。@MichaelBerkowski当然会,我不是问它是否拒绝,而是问它是否拒绝why@DhruvaSagar因为它就是这样设计的。试图猜测/证明理性通常是没有建设性的。也许有一篇关于ML的老文章讨论了设计选择。无论如何,它没有坏。不过,我可以这么说,因为它是这样工作的,你现在有办法检查它是否被改变了。如果是“truthy”返回,则在拒绝!的情况下已成功更改!。如果它是零,那么什么都没有被拒绝。谢谢霞,你应该考虑把你的评论添加到你的答案中。谢谢你,霞,你应该考虑把你的评论添加到你的答案中。