Ruby 许多嵌套的'for'循环取决于一个变量

Ruby 许多嵌套的'for'循环取决于一个变量,ruby,recursion,nested-loops,Ruby,Recursion,Nested Loops,我想根据变量中的值,为周期设置尽可能多的。 例如,如果变量@var=1,我需要执行: for letter1 in @range do something end 如果变量@var=2: for letter1 in @range for letter2 in @range do something end end 如果变量@var=3 for letter1 in @range for letter2 in @range for letter3 in @r

我想根据变量中的值,为周期设置尽可能多的

例如,如果变量
@var=1
,我需要执行:

for letter1 in @range
  do something
end
如果变量
@var=2

for letter1 in @range
  for letter2 in @range
    do something
  end
end 
如果变量@var=3

for letter1 in @range
  for letter2 in @range
    for letter3 in @range
      do something
    end
  end
end 
是否有比下面的代码更智能/更少的代码方式?我不想再重复一遍

if @var == 1
  for letter2 in @range
    do something
  end
elsif @var == 2
  for letter1 in @range
    for letter2 in @range
      do something
    end
  end
elsif @var == 3
  for letter1 in @range
    for letter2 in @range
      for letter3 in @range
        do something
      end
    end
  end 
end

在每种情况下,
做某事的部分总是相同的。区别只是它的周期数。

您应该阅读递归:
有点像:

def f(depth,letters=[])
  if depth == 0
    do someting with letters
  else
    for letter in @range
      f(depth-1,letters+[letter])
    end
  end
end

f(@var)

f
是一个函数,它通过字母再次递归调用自身。每个调用都有info
depth
,这意味着递归应该有多深。

我理论上知道递归是什么,但我需要在代码的“做点什么”部分使用这些循环变量(上面代码中的letter1、letter2、letter3等)。有了这个解决方案,有没有办法做到这一点?脚本正在控制所有可能的字符串组合,包括@var length和@range中的字母。谢谢你的回答。@Kreeki,
字母
是一个包含字母的数组-每个字母都是由
+[letter]
添加到数组中的。它生成新的较长数组并将其发送给递归调用的函数。
@range.map{|x| x}.product(*([@range.map{|x| x}] * n)) do |*args|
  do_something_with(*args)
end