我正在尝试编写一个布尔方法来检查数组中的整数之和是否等于21.这是代码:
def twenty_one? (*arr)
arr.inject(0){|sum,x| sum + x }
arr.eql? (21)
end
Run Code Online (Sandbox Code Playgroud)
但是,如果我检查
puts twenty_one?(19, 2)
Run Code Online (Sandbox Code Playgroud)
它回来了false,即使我也尝试了其他一些.我在这段代码中缺少什么?
Enumrable#inject不会将数组转换为数字.检查数组和数字的相等性,它总是返回false.根据您的逻辑,您应该将结果inject与数字进行比较:
def twenty_one? (*arr)
sum = arr.inject(0) { |sum,x| sum + x }
sum.eql?(21)
end
twenty_one?(19, 2)
#=> true
Run Code Online (Sandbox Code Playgroud)
或者您可以使用reduce:
def twenty_one?(*arr)
arr.reduce(:+) == 21
end
Run Code Online (Sandbox Code Playgroud)
或者您可以使用ActiveSupport缩短时间Enumerable#sum:
def twenty_one?(*arr)
arr.sum == 21
end
Run Code Online (Sandbox Code Playgroud)