Sono un po 'nuovo a Ruby e anche se trovo che sia un linguaggio molto intuitivo, sto avendo qualche difficoltà a capire come si comportano i valori di ritorno impliciti.Valori impliciti di ritorno in Ruby
Sto lavorando su un piccolo programma per eseguire il grep dei registri di Tomcat e generare file CSV delimitati da tubo dai dati pertinenti. Ecco un esempio semplificato che sto usando per generare le linee da una voce di 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[[email protected][accountNumber=0951714636005,srNumber=20]",
/^(\d{2}:\d{2}:\d{2},\d{3}).*?(\d{2}\/\d{2}).*?\[accountNumber=(\d*?),srNumber=(\d*?)\]/)
Quando eseguo questo codice torno quanto segue, che è quello che ci si aspetta quando esplicitamente la restituzione del valore della produzione.
00:00:13,207|06/18|0951714636005|20
Tuttavia, se cambio LineMatcher al seguente e non esplicitamente ritorno di uscita:
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
end
end
end
Poi ho ottenere il seguente risultato:
00:00:13,207
06/18
0951714636005
20
Ovviamente, questo non è il risultato desiderato. Sembra che dovrei essere in grado di eliminare la variabile di output, ma non è chiaro da dove provenga il valore di ritorno. Inoltre, eventuali altri suggerimenti/miglioramenti per la leggibilità sono i benvenuti.
Formattazione corretta – csamuel