如何在红宝石中解决这个等式

时间:2010-07-07 12:01:35

标签: ruby

path1="c:/kabab.txt"
path2="c:/kabab2.txt"
for v in 1..2
puts "#{path}"#{v}"
end

我想创建一个文件,但我无法做到这一点。

1 个答案:

答案 0 :(得分:3)

在Ruby中,您无法使用您尝试过的方法从名称中检索局部变量的。实例变量有instance_variable_get但据我所知,没有等效的局部变量。

"path#{v}"是一个包含变量名称的字符串,因此如果使用eval进行评估,则eval的结果将是变量的值。因此,您可以执行以下操作:

filename = eval("path#{v}")
open(filename, 'w')

但由于潜在的安全问题,您在使用eval时始终需要小心。

相反,我会把文件列表放在一个数组

paths = ["c:/kabab.txt", "c:/kabab2.txt"]

并且做:

paths.each do |path|
  f = open(path, 'w')
  # use file here
end

或者如果所有文件共享一个共同的前缀和扩展名,则为:

prefix = "c:/kabab"
extension = ".txt"
for v in 1..2
  filename = "#{prefix}#{v}#{extension}"
  # use filename here
end