Ruby is really Niubility in some ways.
《Programming Ruby 2ed》中文版这本书的源代码在网站上有下载,但是由于翻译过,并且代码很零碎,有1600多个源代码文件,而且源文件其中的页数已经与中文版的页数不相符了。为了搜索到包含指定的字符串的文件,决定用ruby自己动手写一个,经过多次重构,最后的代码如下:
class BriefExampleCodeFinder
EXP_CODE_DIR="E:/MyCode/MyRubyCode/Programming Ruby/src"
def locate(search_reg)
result = Array.new
Dir.foreach(EXP_CODE_DIR)\
{ |orgFile| result.push( EXP_CODE_DIR+'/'+orgFile) \ #向数组中置入符合条件的文件
if (File.file?(EXP_CODE_DIR+'/'+orgFile) \ #判断是否为文件?有可能是目录
&& File.open(EXP_CODE_DIR+'/'+orgFile).grep(search_reg).length>0) } #用正则表达式完成文件中内容的匹配
return result
end
end
其中红字部分在RUBY中作为一行代码处理,
看出来了么,两行代码搞定!!!
RUBY在文本处理和循环方面的能力真是厉害啊!!!
不过这样好像带来了可读性的问题,但是熟悉RUBY的语法之后,这些应该不是问题吧
p.s,可能有人会考虑到文件的打开和关闭涉及到的异常问题,在RUBY中,对File或IO来说,调用foreach后文件会自动关闭,不需要开发人员进行额外的处理。但是Dir.foreach,是否会自动关闭目录流或文件流呢?这个问题待考,也希望有高人知道的,说一声。
转载于:https://www.cnblogs.com/bryanzk/archive/2007/07/04/805878.html