Valores de retorno implícitos em Ruby
Eu sou um pouco novo para Ruby e, embora eu ache que é uma linguagem muito intuitiva, estou tendo alguma dificuldade em entender como os valores de retorno implícitos se comportam.
Eu estou trabalhando em um pequeno programa para grep logs do Tomcat e gerar arquivos CSV delimitados por pipe a partir dos dados pertinentes. Aqui está um exemplo simplificado que estou usando para gerar as linhas de uma entrada de log.
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[accountId=AccountId@66679198[accountNumber=0951714636005,srNumber=20]",
/^(\d{2}:\d{2}:\d{2},\d{3}).*?(\d{2}\/\d{2}).*?\[accountNumber=(\d*?),srNumber=(\d*?)\]/)
Quando executo esse código, recebo o seguinte, que é o esperado quando se retorna explicitamente o valor da saída.
00:00:13,207|06/18|0951714636005|20
No entanto, se eu alterar o LineMatcher para o seguinte e não retornar explicitamente a saída:
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
end
end
end
Então eu recebo o seguinte resultado:
00:00:13,207
06/18
0951714636005
20
Obviamente, este não é o resultado desejado. Parece que eu deveria ser capaz de me livrar da variável de saída, mas não está claro de onde o valor de retorno está vindo. Além disso, quaisquer outras sugestões / melhorias para a legibilidade são bem-vindas.