-1
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),它将整数数组作为参数并返回其元素的总和。出于某种原因,我不断收到

'主:对象的未定义方法'sum'

错误。

4

2 回答 2

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
于 2013-09-11T23:33:58.653 回答
0

我只是准确地输入了您所拥有的内容,但经过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”方法可以做到这一点。IE:

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 文档,您可能已经发现它是内置的。请参阅Array的 ruby​​ 文档。

于 2013-09-11T23:51:56.893 回答