我对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[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
显然,这不是预期的结果。我感觉我应该能够去掉output变量,但是不清楚返回值来自哪里。此外,欢迎对可读性提出任何其他建议/改进。
https://stackoverflow.com/questions/1064159
复制相似问题