我有一些对象(不是所有对象)的记录,我必须检查它们是真还是假,以标记另一条记录是真还是假。这就是我现在正在做的事情:
step_finished = object.one == true && object.two == true && object.three == true && object.four == true
我确信必须有更好的方法,但我找不到它。我有另外一步要检查20个值,所以如果你知道一个更有效的方法检查这个,请帮忙!
谢谢!
答案 0 :(得分:5)
您无需测试== 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?
答案 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) }