私はRubyに少し慣れていません。非常に直感的な言語だと思いますが、暗黙の戻り値がどのように動作するかを理解するのに苦労しています。
Tomcat ログを grep し、関連データからパイプ区切りの CSV ファイルを生成する小さなプログラムに取り組んでいます。これは、ログ エントリから行を生成するために使用している簡単な例です。
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*?)\]/)
このコードを実行すると、次の結果が返されます。これは、出力の値を明示的に返すときに期待されるものです。
00:00:13,207|06/18|0951714636005|20
ただし、 LineMatcher を次のように変更し、明示的に出力を返さない場合:
class LineMatcher
class << self
def match(line, regex)
output = ""
line.scan(regex).each do |matched|
output << matched.join("|") << "\n"
end
end
end
end
次に、次の結果が得られます。
00:00:13,207
06/18
0951714636005
20
明らかに、これは望ましい結果ではありません。出力変数を取り除けばいいような気がしますが、戻り値がどこから来ているのか不明です。また、読みやすさに関するその他の提案/改善は大歓迎です。