在循环红宝石内部使用迭代器初始化变量

时间:2018-07-10 18:13:06

标签: ruby-on-rails ruby initializing

我想创建像a1,a2这样的变量名。

 n.times { |n|
  puts "enter number of rows and columns for #{n} array"
  rows = gets.to_i
  cols = gets.to_i
  a+"#{n}" = Array.new(rows,'w') {Array.new(cols,'w')}
 }
  

错误:

     

语法错误,意外的'=',期望'}'“ a#{n}” =   Array.new(rows,'w'){Array.new(cols,'w')}

1 个答案:

答案 0 :(得分:2)

虽然通常可以在Ruby中创建动态命名的局部变量,但这通常不是必需的,并且通常表示软件设计不佳。

相反,应该使用常规数据约束来保存数据。在您的情况下,您可以使用哈希,例如

arrays = {}
n.times do |n|
  puts "enter number of rows and columns for #{n} array"
  rows = gets.to_i
  cols = gets.to_i
  arrays["a#{n}"] = Array.new(rows,'w') {Array.new(cols,'w')}
end

然后,您可以访问arrays["a1"]来访问已定义的数组,也可以访问arrays["a1"][1][3]来访问嵌套数组中的特定单元格。