我正在尝试解决Ruby挑战,我在其中定义了一个确定数字是否为“Kaprekar”类型的方法。我不断得到以下论点:
C:\Users\Lemuel\Desktop\RubyProjects\RubyMonk>ruby kaprekars_n.rb
kaprekars_n.rb:8:in `count': wrong number of arguments (at least 1) (ArgumentError)
from kaprekars_n.rb:8:in `kaprekars'
from kaprekars_n.rb:13:in `<main>'
在以下代码之后:
def kaprekars(n)
numStr = n.to_s
numDigits = numStr.count numStr
squareNum = n*n
x = []
squareNum.to_s.each_char {|c| x << c }
l = x[0..(numDigits-1)].inject(:+)
r = x[l.count..(x.count)].inject(:+)
sum = l+r
sum == n ? true : false
end
puts kaprekars(2)
终端中的实验表明我正在使用count方法,所以我不理解错误。
答案 0 :(得分:3)
您在多个地方使用count
,问题排在第8
行:
r = x[l.count..(x.count)].inject(:+)
应该是:
r = x[l.size..(x.size)].inject(:+)
一些解释 - Array
和String
都有count
方法,但它们不同,并且期望参数数量不同:
count
返回数组中元素的数量,或者等于给定参数的元素数(如果给出的话)count
计算与作为参数给出的字符集交集匹配的字符数。它期望至少一个字符串参数。 Array
和String
都有一个size
方法,它会返回Array
或String
的大小。
当您第一次呼叫numStr.count numStr
时,您实际上正在计算字符串中的所有字符,因此您也可以使用numStr.size
,但这是合法的呼叫。
在第8行中,您尝试在count
(这是一个数组)和x
(这是一个字符串)上调用l
而没有任何参数,这会导致失败。