如何生成变量名称

时间:2015-08-30 23:36:20

标签: ruby

我在迭代this_dir

this_dir = Dir.new(".")

puts每个.rb文件。使用文件夹(一切都不是.rb),我想打开它们,列出它们的内容,并将它们设置为变量。我创建了一个数组names来获取变量名称,并计划通过调用names_index并将1添加到其中来迭代它。

names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'n', 'm', 'o', 'p']
names_index = 0

不幸的是,我知道如何处理数组值的最接近的是它们puts,这使它成为一个字符串。

this_dir.each do |file|
  if file.include?("*.rb")
    puts file
  else
    ....
  end
end

如何将数组值转换为变量名?

2 个答案:

答案 0 :(得分:2)

如果您只想列出目录及其子目录中的所有.rb文件,请使用带有Dir.glob模式的**来递归子目录,如下所示:

Dir.glob('./**/*.rb').each do |file|
  puts file
end

通常,为了存储许多项目而动态创建变量名称是没有意义的。在这种情况下(当上面的Dir.glob之类的更好的解决方案不可用时),你应该使用一个数组(或者有时候使用哈希)。

答案 1 :(得分:1)

乔丹已经向你展示了一种更好的方式来实现你显然想要达到的目标。但是,如果由于某种原因你仍然想按照你提出的方式去做,我想指出这曾经可以回到Ruby 1.8。但是对于较新的版本(截至撰写本文时),您无法动态创建局部变量。 但是你仍然可以使用哈希来实现类似的东西:

names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'n', 'm', 'o', 'p']
names_index = 0

table = {}

this_dir.each do |file|
  if file.include?("*.rb")
    puts file
  else
    table[names[names_index]] = file
    names_index += 1
  end
end

现在,如果找到不同于.rb的文件,它将被存储,您可以像这样访问它:

table['a']

哪会返回此类文件。

这样做显然没有任何实际意义,你可能不应该这样做 - 但这是为了你的好奇心。