как решить это уравнение в рубине - PullRequest
0 голосов
/ 07 июля 2010
path1="c:/kabab.txt"
path2="c:/kabab2.txt"
for v in 1..2
puts "#{path}"#{v}"
end

Я хотел бы создать файл, но я не могу этого сделать.

1 Ответ

3 голосов
/ 07 июля 2010

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...