设置可选的方法参数?

时间:2014-03-14 12:44:15

标签: ruby recursion

我正在尝试定义一种方法来对给定数组的元素求和。到目前为止,我有:

def sum2
  return self if self.length <=1
  i = self.length
  @sum2 = sum2(i-1) + self[i]
end

我第二次调用sum2(i-1)时收到无效参数错误。有什么方法可以设置它采取0或1参数?或者,我是否采取了错误的方式?

1 个答案:

答案 0 :(得分:1)

从语法问题来看并不完全清楚,但我认为sum2是你自己定义的数组类中的一个方法。所以,我认为它是从Ruby Array类派生的。

目前,如果数组只有一个元素,则返回数组self。从技术上讲,一个元素的数组不是元素的总和。因此,您不希望在这种情况下返回self

但是你可以使用Ruby的数组方法来简化:

def sum2
  self.inject(:+)
end

如果数组的长度为零,则返回nil,否则返回元素的总和。如果您想在0长度数组上返回0,那么:

def sum2
  return (self.length == 0) ? 0 : self.inject(:+)
end

或者更简单地说,根据@ toro2k的评论:

def sum2
  self.inject(0, :+)
end