Ruby方法重载

时间:2014-05-08 12:45:42

标签: ruby overloading

所以我必须实现两种不同的情况。一种是将两个数相乘的方法,也可以乘以2个数以上。

我正在使用以下内容:

def multiply(arr)
    arr.reduce(1, :*)
end

到目前为止,如果我使用数组输入进行单元测试,它可以正常工作。反正有没有这样做,所以我的方法可以只接受两个值,或一个数组,并返回相关的结果?是否还有一种方法可以在不使用数组输入的情况下实现它?

1 个答案:

答案 0 :(得分:3)

使用splat运算符:

def multiply(*arr)
  arr.reduce(1, :*)
end

multiply(2, 3, 4, 5)
# => 120 

如果您想 想要支持输入数组,可以flatten使用arr

def multiply(*arr)
  arr.flatten.reduce(1, :*)
end

multiply([2, 3, 4, 5])
# => 120 
multiply(10, 3, 5)
# => 150 
multiply(10, 3)
# => 30