gpt4 book ai didi

scala - Scala 中的闭包

转载 作者:行者123 更新时间:2023-12-02 08:50:21 28 4
gpt4 key购买 nike

我正在努力学习 Scala,但我无法理解这个例子。在 Odersky 等人的《Scala 编程》 list 9.1 中。 al., 作者制作了这段代码

object FileMatcher {
private def filesHere = (new java.io.File(".")).listFiles
private def filesMatching(matcher: String => Boolean) =
for (file <- filesHere; if matcher(file.getName))
yield file
def filesEnding(query: String) =
filesMatching(_.endsWith(query))
def filesContaining(query: String) =
filesMatching(_.contains(query))
def filesRegex(query: String) =
filesMatching(_.matches(query))
}

它们给出了一个场景,您正在编写一个 FileMatcher 对象以供其他人编写的客户端代码使用,并且此代码是几次重构的结果。

我知道查询是一个自由变量,但我不明白调用者应该如何使用它。如果我理解正确的话,Scala 是词法范围的,而且这是一个对象定义,客户端无法在词法封闭范围内定义查询,那么查询从何而来?

例如,您能否举例说明客户端应该如何调用 filesEnding 来查找所有以“.txt”结尾的文件?

最佳答案

试一试。

scala> object FileMatcher {
| private def filesHere = (new java.io.File(".")).listFiles
| private def filesMatching(matcher: String => Boolean) =
| for (file <- filesHere; if matcher(file.getName))
| yield file
| def filesEnding(query: String) =
| filesMatching(_.endsWith(query))
| def filesContaining(query: String) =
| filesMatching(_.contains(query))
| def filesRegex(query: String) =
| filesMatching(_.matches(query))
| }
defined module FileMatcher

scala> FileMatcher filesEnding "xml"
res7: Array[java.io.File] = Array(./build.examples.xml, ./build.xml, ./build.detach.xml)

scala> FileMatcher filesContaining "example"
res8: Array[java.io.File] = Array(./build.examples.xml)

如果您还有其他问题,请添加。

关于scala - Scala 中的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913546/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com