我不明白为什么作者说"Scala编程"的代码清单9.1使用了闭包.在第9章中,他们展示了如何将代码重构为更复杂的形式,从这个原始代码:
object FileMatcher {
private def filesHere = (new java.io.File(".")).listFiles
def filesEnding(query: String) =
for (file <- filesHere; if file.getName.endsWith(query))
yield file
def filesContaining(query: String) =
for (file <- filesHere; if file.getName.contains(query))
yield file
def filesRegex(query: String) =
for (file <- filesHere; if file.getName.matches(query))
yield file
}
Run Code Online (Sandbox Code Playgroud)
到第二个版本:
object FileMatcher {
private def filesHere = (new java.io.File(".")).listFiles
def filesMatching(query: String,
matcher: (String, String) => Boolean) = {
for (file <- filesHere; if matcher(file.getName, query))
yield file
}
def filesEnding(query: String) …Run Code Online (Sandbox Code Playgroud) 好吧,这个问题似乎真的很愚蠢,但我的观点是,如果你看一下Scala 2.7.6 API,他们就不推荐使用mappingToString方法了.因此,应该有更优雅的替代方案来打印自定义格式的Map.因为几乎任何目的,在Map中使用mkString的等价方法非常方便.
你们怎么看待它?除println外,打印地图的编码片段是什么?
我将使用Scala比较大约300个二进制文件,逐个字节,每个4MB.但是,根据我已经完成的工作,使用java.BufferedInputStream同时处理15个文件在我的机器上花了大约90秒,所以我认为我的解决方案在大量文件方面不会很好.
我们非常感谢您的意见和建议.
编辑:实际任务不只是比较差异,而是以相同的顺序处理这些文件.比方说,我要看看字节第i个中的每一个文件的同时,并移动到(第i + 1).