Ruby “Arrayreject!”的目的是什么在没有更改时返回'nil'?
Arrayreject!与Arrayreject相比,如果接收器中的每个元素在适当位置被更改,并且在这种情况下不会更改,则返回nil,以防块计算为false: 我觉得这很奇怪。为什么Arrayreject!是设计来这样做的吗?应该退出!在这种情况下表现得像Arrayreject 我希望能够像select!这样链接方法!,拒绝还有地图!。有没有办法做到这一点?改用delete\u if?其余的东西链很好 “拒绝”的工作原理与“选择”类似,它实际上是返回一个新容器,然后只指向新容器,因为您要求!,鉴于,如果您正在执行此操作,请直接删除_ 我同意这是不自然的,但经常发生的事情是,你写:Ruby “Arrayreject!”的目的是什么在没有更改时返回'nil'?,ruby,arrays,Ruby,Arrays,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”返回,则在拒绝!的情况下已成功更改!。如果它是零,那么什么都没有被拒绝。谢谢霞,你应该考虑把你的评论添加到你的答案中。谢谢你,霞,你应该考虑把你的评论添加到你的答案中。