2016-08-16 103 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