在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) }