基于变量的参数数量

Fia*_*ite 3 ruby parameters

有没有办法在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
Run Code Online (Sandbox Code Playgroud)

Car*_*and 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
Run Code Online (Sandbox Code Playgroud)

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