2016-08-16 83 views
3

在Ruby中,有没有一种方法具有x个相同的参数?基于变量的参数数量

问最简单的方法是,你能缩短这个吗?

arr = [0,1,2,3] 
if x == 1 
    return arr 
elsif x == 2 
    return arr.product(arr) 
elsif x == 3 
    return arr.product(arr, arr) 
elsif x == 4 
    return arr.product(arr, arr, arr) 
elsif x == 5 
    return arr.product(arr, arr, arr, arr) 
end 
+2

这里最基本的概念是,您可以使用“splat”(星号'*')将数组转换为顺序参数。 发布的答案包括一个很好的例子。 –

+0

如果有任何答案有帮助,请考虑选择一个您喜欢的答案。 (如果有不止一个答案,我更愿意说这个,但问题是几天之后......) –

回答

8

您可以获得如下所需的结果。

def prod(arr, x) 
    return arr if x==1 
    arr.product(*[arr]*(x-1)) 
end 

arr = [0,1,2,3] 

arr        == prod(arr, 1) #=> true 
arr.product(arr)    == prod(arr, 2) #=> true 
arr.product(arr, arr)   == prod(arr, 3) #=> true 
arr.product(arr, arr, arr)  == prod(arr, 4) #=> true 
arr.product(arr, arr, arr, arr) == prod(arr, 5) #=> true 
+0

单线程'return x == 1? arr:arr.product(* [arr] *(x-1))':) – Santhosh

+3

我可能会使用[数组构造函数](http://ruby-doc.org/core-2.3.1/Array。 html#method-c-new)避免两个'*'之间的混淆,即'arr.product(* Array.new(x-1,arr))' – Stefan