Ruby:3212:Fixnum 的未定义方法 'digits' (NoMethodError)



下面的代码旨在接收一个整数,每个数字平方并用平方数字返回整数。

但是,我一直存在此错误:

`square_digits': undefined method `digits' for 3212:Fixnum (NoMethodError)
    from `
'

我不明白为什么我会有这个错误,因为.Digits方法是Ruby中的一种方法,并且我在整数上使用它,但它给了我一个Nomethoderror。

def square_digits(digit)
  puts digit
  puts digit.inspect
  puts digit.class
  if digit <= 0
    return 0
  else
    #converts the digit into digits in array
    split_digit = digit.digits
    puts "split digit class and inspect"
    puts split_digit.inspect
    puts split_digit.class
    # multiples each digit by itself
    squared = split_digit.map{ |a| a * a}
    squared.reverse!
    # makes digits into string
    string = squared.join('')
    # converts string into integer
    string.to_i
  end
end

有人知道发生了什么?

我猜您使用的是Ruby的较旧版本,而不是2.4.0。如果是这样,则此方法将不可用。它在2.4.0中添加。查看此链接

要添加对您的旧红宝石版本的支持,您可以在方法定义之前添加以下代码。

class Integer
  def digits(base: 10)
    quotient, remainder = divmod(base)
    quotient == 0 ? [remainder] : [*quotient.digits(base: base), remainder]
  end
end

添加此代码段后,您应该能够运行方法。

最新更新