Implizite Rückgabewerte in Ruby
Ich bin etwas neu in Ruby und obwohl ich finde, dass es eine sehr intuitive Sprache ist, habe ich einige Schwierigkeiten zu verstehen, wie sich implizite Rückgabewerte verhalten.
Ich arbeite an einem kleinen Programm, um Tomcat-Protokolle zu erfassen und durch Pipes getrennte CSV-Dateien aus den relevanten Daten zu generieren. Hier ist ein vereinfachtes Beispiel, das ich verwende, um die Zeilen aus einem Protokolleintrag zu generieren.
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*?)\]/)
Wenn ich diesen Code ausführe, erhalte ich Folgendes zurück, was erwartet wird, wenn der Ausgabewert explizit zurückgegeben wird.
00:00:13,207|06/18|0951714636005|20
Wenn ich jedoch LineMatcher auf Folgendes ändere und die Ausgabe nicht explizit zurückgebe:
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
end
end
end
Dann erhalte ich folgendes Ergebnis:
00:00:13,207
06/18
0951714636005
20
Offensichtlich ist dies nicht das gewünschte Ergebnis. Es fühlt sich an, als ob ich die Ausgabevariable loswerden könnte, aber es ist unklar, woher der Rückgabewert kommt. Auch andere Vorschläge / Verbesserungen zur Lesbarkeit sind willkommen.