"至少一个"尽管方法调用正确,但参数错误

时间:2014-06-28 15:29:34

标签: ruby

我正在尝试解决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方法,所以我不理解错误。

1 个答案:

答案 0 :(得分:3)

您在多个地方使用count,问题排在第8行:

r = x[l.count..(x.count)].inject(:+)

应该是:

r = x[l.size..(x.size)].inject(:+)

一些解释 - ArrayString都有count方法,但它们不同,并且期望参数数量不同:

  • 数组count返回数组中元素的数量,或者等于给定参数的元素数(如果给出的话)
  • 字符串count计算与作为参数给出的字符集交集匹配的字符数。它期望至少一个字符串参数。

ArrayString都有一个size方法,它会返回ArrayString的大小。

当您第一次呼叫numStr.count numStr时,您实际上正在计算字符串中的所有字符,因此您也可以使用numStr.size,但这是合法的呼叫。

在第8行中,您尝试在count(这是一个数组)和x(这是一个字符串)上调用l而没有任何参数,这会导致失败。