Я начал изучать Руби и думал, что я что-то создаю; Я начал писать простой синтаксический анализатор конфигурации. Простым принципом является то, что вы кормите его правильно отформатированным файлом и выплевываете хэш настроек. Например, это конфигурационный файл:Почему это только возвращает первую настройку?
localhost: 4000;
auto: true;
и это то, что она возвращает:
{"localhost" => "4000", "auto" => "true"}
Теперь, я получил его на работу, когда это вводится непосредственно со следующим кодом:
def spit_direct(input = "", *args)
spat = Hash.new
args.each do |arg|
if input.include? arg
strip = input.match(/#{arg}:\s(\w*);/)
spat[arg] = strip[1]
else
# error message
break
end
end
spat
end
spit_direct("localhost: 4000; auto: true;", "localhost", "auto")
# => {"localhost"=>"4000", "auto"=>"true"}
Это работает так, как я хочу, однако, хотя было бы лучше, если бы был загружен фактический файл. Я придумал следующий код, однако это только кажется, вернуть первый параметр, а не второй один:
def spit_file(input = "", *args)
spat = Hash.new
args.each do |arg|
File.open(input).each_line do |line|
if line.include? arg
strip = line.match(/#{arg}:\s(\w*);/)
spat[arg] = strip[1]
else
# error message
break
end
end
end
spat
end
Если я кормить его файл с именем config.cnfg
с тем же содержанием, как выше нескольких файлов настроек, как так:
spit_file("(path)/config.cnfg", "localhost", "auto")
это только возвращает:
# => {"localhost"=>"4000"}
Почему? Я потратил пару часов на это прошлой ночью, но не могу понять, в чем проблема.
Проклятье, спасибо большое. Я тоже не был уверен в порядке петель. – raf
@dnnx Вы можете присоединиться к сайту? http://chat.stackoverflow.com/rooms/27184/ruby-conceptual –