gpt4 book ai didi

ruby - 为什么.all?在空数组上返回 true?

转载 作者:数据小太阳 更新时间:2023-10-29 06:29:37 24 4
gpt4 key购买 nike

我想使用 Ruby 评估数组中的所有项,如果它们都通过条件测试则返回 true。

我可以使用例如array.all? { |值|值 == 2 }

所以:

> array=[2,2]
> array.all? { |value| value == 2 }
=> true
> array=[2,3]
> array.all? { |value| value == 2 }
=> false

太棒了!

但是,为什么一个空数组可以通过这个测试呢?

> array=[]
> array.all? { |value| value == 2 }
=> true

这不应该返回 false 吗?

如果我需要它返回false,我应该如何修改方法?

最佳答案

这是一个 vacuous truth .这是通用量化的标准解释,即 a

collection.all? { |x| some_predicate(x) }

在一个空的 collection 上,但众所周知,当人们第一次在正式场合看到它时,人们会觉得它违反直觉。思考为什么这是首选语义的一种好方法是思考如何实现 all?

要使您的测试要求数组非空,只需执行

array.any? && array.all? { |x| x == 2 }

请注意,无论数组有多大,array.any? 都很快,而 array.all? { |x| x == 2 可能会很慢,这取决于 array 有多大以及 2 在其中的稀有程度。所以把 array.any? 放在第一位。

另请注意,在某些退化的情况下这将不起作用,例如,如果 array[nil][false] .如果可能出现这种情况,请将 array.any? 替换为 array.any? { 真 }

关于ruby - 为什么.all?在空数组上返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com