如果数组中的任何值为true,则布尔数组上的方法应返回true

时间:2014-11-08 17:49:29

标签: ruby boolean-operations

此代码非常有效:

def is_rel_prime?(*args)                              #1
  test = args.combination(2).to_a                     #2
  test.map! { |a,b| a == Rational(a,b).numerator }    #3
  test.reduce (:&)                                    #4
end

> is_rel_prime?(3,4,5) #=> true
> is_rel_prime?(7,12,14) #=> false
> is_rel_prime?(7,12,15) #=> false

如果任何一个(或多个)数组元素为'true',我将如何替换(:&)以使其返回'true'?

2 个答案:

答案 0 :(得分:3)

您的代码有测试bool & bool & boolBoolean#&在一般用法中相当于&&。您可能怀疑,这里的推论是Boolean#|,在一般用法中相当于||。因此,在您的代码中,您将使用test.reduce(:|)来确定列表中的任何布尔值是否为真。

那就是说,Cary是正确的,因为Ruby已经有了通过Enumerable#any?检查可枚举中任何值的真实性的设施(并且可以通过Enumerable#all?检查所有值的真实性),所以你应该只使用那些而不是自己的检查器。

答案 1 :(得分:2)

:&替换为:|(布尔AND与布尔OR)。