我在迭代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
如何将数组值转换为变量名?
答案 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']
哪会返回此类文件。
这样做显然没有任何实际意义,你可能不应该这样做 - 但这是为了你的好奇心。