我對Ruby有點新,雖然我覺得它是一種非常直觀的語言,但我在理解隱式返回值的行爲方面有些困難。Ruby中的隱式返回值
我正在研究一個小程序來grep Tomcat日誌並從相關數據生成管道分隔的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[[email protected][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
顯然,這是不期望的結果。這感覺就像我應該能夠擺脫輸出變量,但不清楚返回值來自哪裏。此外,歡迎任何其他建議/改進可讀性。
更正的格式 – csamuel 2009-06-30 16:05:36