在红宝石中一次检查几个布尔值

时间:2013-12-03 12:07:10

标签: ruby boolean

我有一些对象(不是所有对象)的记录,我必须检查它们是真还是假,以标记另一条记录是真还是假。这就是我现在正在做的事情:

step_finished = object.one == true &&  object.two == true && object.three == true &&  object.four == true

我确信必须有更好的方法,但我找不到它。我有另外一步要检查20个值,所以如果你知道一个更有效的方法检查这个,请帮忙!

谢谢!

4 个答案:

答案 0 :(得分:5)

您无需测试== true;只需测试某事物的“真实性”就足够了。任何不是nilfalse的内容都将在布尔上下文中评估为true。所以这样就足够了:

step_finished = object.one && object.two && object.three && object.four

您还可以使用all?

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

答案 1 :(得分:4)

ruby​​中的任何对象返回值true, false, nil - >因此== true是不必要的
把你的记录放到数组并检查
[object.one, object.two, object.three, object.four].all? all? method

答案 2 :(得分:1)

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

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

检查数组中的所有元素是否为true。 你可以用这个:

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

检查其中至少有一个是true

答案 3 :(得分:1)

step_finished = [:one, :two, :three, :four].all? { |attr| object.send(attr) }