【问题标题】:Undefined method when trying to square each element in array尝试对数组中的每个元素求平方时的未定义方法
【发布时间】:2015-04-24 11:12:03
【问题描述】:

我正在尝试编写一个名为square_digits 的方法,该方法将给定数字中的每个数字平方。我写道:

def square_digits(num)
  number_array = num.to_s.split("")
  num_to_int = number_array.to_i
  num_squared = num_to_int.each{|n| n**2}
  return num_squared.join("")
end

当尝试运行 square_digits(3212)(应该返回 9414)时,我收到以下错误消息:

`block in square_digits': undefined method `**' for "3":String (NoMethodError)
from `each'
from  `square_digits'
from  `
'

我不太确定我应该怎么做才能修复它;有什么建议吗?

【问题讨论】:

    标签: ruby undefined nomethoderror


    【解决方案1】:

    嗯,这里有几个问题:

    输入123 应该会出错:

    num_to_int = number_array.to_i
    

    与:

    NoMethodError: undefined method 'to_i' for ["1","2","3"]:Array

    你想要:

    num_to_int = number_array.map(&:to_i)
    

    还有

    num_squared = num_to_int.each{|n| n**2}

    不返回 each 的结果,只返回原始数组。

    所以第一次修复它只会返回"123"

    你想要的:

    num_squared = num_to_int.map{|n| n**2}
    

    所以最终的函数看起来像:

    def square_digits(num)
      number_array = num.to_s.split("")
      num_to_int = number_array.map(&:to_i)
      num_squared = num_to_int.map{|n| n**2}
      return num_squared.join("")
    end
    

    虽然我对你想要达到的目标感到困惑。

    【讨论】:

    • 我本想发布相同的代码,但你用 30 秒咬了我 ;) 1+
    • Dickie,你自己被警告了:如果你咬别人,我会举报你的。
    • @CarySwoveland 抱歉警告了?干什么用的?
    • 我指的是@Gagen 评论中的拼写错误。 :-)
    【解决方案2】:

    你也可以试试这个;)

    def square_digits(num)
      num.to_s.split('').map { |n| n.to_i ** 2 }.join("")
    end
    

    或者

    def square_digits(num)
      num.to_s.chars.map { |n| n.to_i ** 2 }.join("")
    end
    

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2016-07-08
      • 2013-10-12
      • 1970-01-01
      • 2021-06-12
      • 2019-03-06
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多