【问题标题】:New to Ruby - undefined method error [closed]Ruby新手-未定义的方法错误[关闭]
【发布时间】:2013-09-16 03:50:38
【问题描述】:
def sum(arr = [1,2,3,4,5])

    addedUp = 0
    i = 0
    while i < arr.length
      addedUP += arr[i]
    end
    return addedUp

end

目标是定义一个方法 sum(arr),它接受一个整数数组作为参数并返回其元素的总和。出于某种原因,我不断收到一个

'main:Object 的未定义方法 `sum'

错误。

【问题讨论】:

  • 你怎么打电话给sum
  • 这是一个单独的问题,但您不会在 while 循环中增加 i。这将是一个无限循环,除非您在addedUp += arr[i] 之后添加i += 1

标签: ruby arrays methods arguments undefined


【解决方案1】:

ruby 区分大小写,就像@grandinero 提到的你需要增加i 变量

def sum(arr = [1,2,3,4,5])

    addedUp = 0
    i = 0
    while i < arr.length
      addedUp += arr[i] #you had addedUP; this was the undefined method error
      i += 1            #infinite loop without this
    end
    return addedUp

end

还有更多 ruby​​ 风格的方法来对数组求和

def sum(*arr)
  return arr.flatten.inject(0, :+)
end
puts sum(1,2,3,4,5)     #=> 15
puts sum([1,2,3,4,5])   #=> 15

【讨论】:

  • 虽然很好,但这并没有解决原始发布者报告的错误消息:undefined method 'sum' for main:Object
  • 真的。可能sum 被埋在ModuleClass 中,他们正试图从“主要”对象执行它
  • addUP 与 addUp 的错字。
  • 我希望 SO 能够更好地自动更新,我会在发布后立即看到您的答案。
【解决方案2】:

我刚刚输入了您所拥有的内容,但经过i += 1 更正,它运行良好。你可能在某个地方有错字。

是的,这里有错字:

def sum(arr = [1,2,3,4,5])

    addedUp = 0
    i = 0
    while i < arr.length
      addedUP += arr[i]  # <- you have addedUP instead of addedUp, notice the capital P
    end
    return addedUp

end

如前所述,还有更多“Ruby”方法可以做到这一点。即:

def sum(arr = [1,2,3,4,5])
  x = 0
  arr.each do |y|
    x += y
  end
  x   #the return is implied in Ruby. Methods return their last result.
end

如上所示,还有更多的 ruby​​esque 方式可以做到这一点,但看起来你是新手,我想让你看看如何正确地说出你想说的话。我学到的关于 Ruby 的一件事是,如果您认为自己需要某些东西,请查看 API 文档,您可能已经发现它是内置的。请参阅 ruby​​ 文档以获取 Array

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多