Valores de retorno implícitos en Ruby
Soy un tanto nuevo para Ruby y, aunque me parece un lenguaje muy intuitivo, tengo algunas dificultades para entender cómo se comportan los valores de retorno implícitos.
Estoy trabajando en un pequeño programa para grep los registros de Tomcat y generar archivos CSV delimitados por tuberías a partir de los datos pertinentes. Aquí hay un ejemplo simplificado que estoy usando para generar las líneas de una entrada de registro.
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*?)\]/)
Cuando ejecuto este código, obtengo lo siguiente, que es lo que se espera cuando se devuelve explícitamente el valor de la salida.
00:00:13,207|06/18|0951714636005|20
Sin embargo, si cambio LineMatcher a lo siguiente y no devuelvo explícitamente la salida:
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
end
end
end
Entonces me sale el siguiente resultado:
00:00:13,207
06/18
0951714636005
20
Obviamente, este no es el resultado deseado. Parece que debería poder deshacerme de la variable de salida, pero no está claro de dónde viene el valor de retorno. Además, cualquier otra sugerencia / mejora para mejorar la legibilidad es bienvenida.