此代码非常有效:
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'?
答案 0 :(得分:3)
您的代码有测试bool & bool & bool
。 Boolean#&
在一般用法中相当于&&
。您可能怀疑,这里的推论是Boolean#|
,在一般用法中相当于||
。因此,在您的代码中,您将使用test.reduce(:|)
来确定列表中的任何布尔值是否为真。
那就是说,Cary是正确的,因为Ruby已经有了通过Enumerable#any?
检查可枚举中任何值的真实性的设施(并且可以通过Enumerable#all?
检查所有值的真实性),所以你应该只使用那些而不是自己的检查器。
答案 1 :(得分:2)
将:&
替换为:|
(布尔AND与布尔OR)。