数组的布尔方法'Blackjack'

0 ruby arrays

我正在尝试编写一个布尔方法来检查数组中的整数之和是否等于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,即使我也尝试了其他一些.我在这段代码中缺少什么?

Ily*_*lya 5

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)