我正在尝试定义一种方法来对给定数组的元素求和。到目前为止,我有:
def sum2
return self if self.length <=1
i = self.length
@sum2 = sum2(i-1) + self[i]
end
我第二次调用sum2(i-1)
时收到无效参数错误。有什么方法可以设置它采取0或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