Niejawne wartości zwracane w Ruby
Jestem trochę nowy w Rubim i chociaż uważam, że jest to bardzo intuicyjny język, mam pewne trudności ze zrozumieniem, jak zachowują się niejawne wartości zwrotne.
Pracuję nad małym programem do logów grep Tomcat i generuję pliki CSV rozdzielone rurami z odpowiednich danych. Oto uproszczony przykład, którego używam do generowania wierszy z wpisu dziennika.
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*?)\]/)
Po uruchomieniu tego kodu otrzymuję następujące informacje, co jest oczekiwane podczas jawnego zwracania wartości wyniku.
00:00:13,207|06/18|0951714636005|20
Jeśli jednak zmienię LineMatcher na następujący i nie jawnie zwrócę dane wyjściowe:
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
end
end
end
Wtedy otrzymuję następujący wynik:
00:00:13,207
06/18
0951714636005
20
Oczywiście nie jest to pożądany rezultat. Wydaje mi się, że powinienem być w stanie pozbyć się zmiennej wyjściowej, ale nie jest jasne, skąd pochodzi wartość zwracana. Również wszelkie inne sugestie / ulepszenia dotyczące czytelności są mile widziane.