Я немного новичок в Ruby, и хотя я считаю, что это очень интуитивный язык, я с трудом понимаю, как ведут себя неявные возвращаемые значения.
Я работаю над небольшой программой для grep-журналов Tomcat и сгенерировал CSV файлы с разделителями по каналам из соответствующих данных. Вот упрощенный пример, который я использую для генерации строк из записи журнала.
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
return output
end
end
end
puts LineMatcher.match("00:00:13,207 06/18 INFO stateLogger - TerminationRequest[[email protected][accountNumber=0951714636005,srNumber=20]",
/^(\d{2}:\d{2}:\d{2},\d{3}).*?(\d{2}\/\d{2}).*?\[accountNumber=(\d*?),srNumber=(\d*?)\]/)
Когда я запускаю этот код, я возвращаю следующее: это то, что ожидается при явном возврате значения вывода.
00:00:13,207|06/18|0951714636005|20
Однако, если я изменяю LineMatcher на следующее и явно не возвращаю вывод:
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
end
end
end
Тогда я получаю следующий результат:
00:00:13,207
06/18
0951714636005
20
Очевидно, что это не желаемый результат. Мне кажется, что я смогу избавиться от выходной переменной, но неясно, откуда возвращается возвращаемое значение. Кроме того, любые другие предложения/улучшения для удобочитаемости приветствуются.