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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage