在ruby中同时检查几个布尔值

在ruby中同时检查几个布尔值,ruby,boolean,Ruby,Boolean,我有一个对象的几个记录(不是全部),我必须检查它们是否正确,以标记另一个记录是否正确。这就是我现在正在做的: step_finished = object.one == true && object.two == true && object.three == true && object.four == true 我肯定有更好的办法,但我一直没能找到。我还有一个步骤要检查20个值,所以如果你知道一种更有效的方法来检查这个,请帮助 谢谢 ru

我有一个对象的几个记录(不是全部),我必须检查它们是否正确,以标记另一个记录是否正确。这就是我现在正在做的:

step_finished = object.one == true &&  object.two == true && object.three == true &&  object.four == true
我肯定有更好的办法,但我一直没能找到。我还有一个步骤要检查20个值,所以如果你知道一种更有效的方法来检查这个,请帮助


谢谢

ruby中的任何对象都返回值,例如
true、false、nil
->
==true
,因此不需要
将记录放入数组并进行检查

[object.1,object.2,object.3,object.4]。全部?

您不需要测试
==true
;仅仅测试某件事的“真实性”就足够了。任何不是
nil
false
的内容都将在布尔上下文中计算为
true
。因此,这样做就足够了:

step_finished = object.one && object.two && object.three && object.four
您还可以使用
all?

step_finished = [object.one, object.two, object.three, object.four].all?

作为一种变体,您可以这样使用
reduce

[object.one, object.two, object.three, object.four].reduce(:&)
检查数组中的所有元素是否为
true
。 你可以用这个:

[object.one, object.two, object.three, object.four].reduce(:|)

检查它们中是否至少有一个是
true

[object.one,object.two,object.three,object.four]。所有的?
都是数组中的记录吗?太棒了。Ruby中的一切都有解决方案。非常感谢Monk_code您,此方法可以通过
&block
检查某些内容您测试的“内容”是对象的真实性。一个物体如果不是假的,它就是真实的。唯一错误的对象是
false
nil
,其他所有对象都是真实的(包括
0
、空字符串、空数组等)。@HolgerJust fair point,我编辑了解释。如果您认为任何进一步的澄清都会有好处,请告诉我。
step_finished = [:one, :two, :three, :four].all? { |attr| object.send(attr) }