scala占位符调用所需的代码解释
有人能帮我理解这个代码吗scala占位符调用所需的代码解释,scala,Scala,有人能帮我理解这个代码吗 object FileMatcher { private def filesHere = (new java.io.File("C:/scalaTestcode")).listFiles private def fileMatching(matcher : String => Boolean) = { for(file <- filesHere; if matcher(file.getName)) yield file } def filesEndin
object FileMatcher {
private def filesHere = (new java.io.File("C:/scalaTestcode")).listFiles
private def fileMatching(matcher : String => Boolean) =
{
for(file <- filesHere; if matcher(file.getName)) yield file
}
def filesEnding(query:String) =
fileMatching {_.endsWith(query) }
def filesContaining(query:String) =
fileMatching {_.contains(query)}
def fileRegex(query:String)=
fileMatching {_.matches(query)}
def main(args : Array[String])
{
(filesEnding(".scala").toArray).foreach(println)
}
}
对象文件匹配器{
private def files here=(新的java.io.File(“C:/scalaTestcode”)).listFiles
私有def文件匹配(匹配器:String=>Boolean)=
{
对于(文件)
是x=>x.endsWith(查询)
.endsWith(查询)
是x.endsWith(查询)
的缩写,意思是“使用我正在操作的值”
这可能有用:
在您的例子中,它可以被匿名函数取代:x=>x.endsWith(query)
,但由于它并不含糊,scala允许您使用语法糖,它可以用作速记,意思是“使用我正在操作的值”
这可能有用:
在您的例子中,它可以被匿名函数取代:x=>x.endsWith(query)
,但由于它并不含糊,scala允许您使用这种语法糖让我们从fileMatching()
开始
参数matcher
是一个函数,它接受字符串
,并返回布尔值
因此,这必须是对.endsWith(query)
和.contains(query)
和.matches(query)
的准确描述。所有这些函数都是以下划线表示的字符串
,并返回布尔值的函数
现在如何使用matcher
参数
... if matcher(file.getName) ...
因此,file.getName
成为表示的字符串,它被送入matcher()
函数,在if
子句中测试Boolean
结果。让我们从fileMatching()
开始
参数matcher
是一个函数,它接受字符串
,并返回布尔值
因此,这必须是对.endsWith(query)
和.contains(query)
和.matches(query)
的准确描述。所有这些函数都是以下划线表示的字符串
,并返回布尔值的函数
现在如何使用matcher
参数
... if matcher(file.getName) ...
因此,file.getName
成为所表示的字符串
,它被馈送到匹配器()
函数,并且在if
子句中测试Boolean
结果。\u
是占位符语法的用法。本质上,如果lambda签名中的每个变量只使用一次,并且每个变量都按照签名中给定的顺序使用,则可以用_
并删除签名,因为它没有歧义
由于您使用的代码示例与《Scala编程》一书中使用的代码示例非常相似,因此您可能需要回到“8.5占位符语法”一章\u
是占位符语法的用法。本质上,如果lambda签名中的每个变量只使用了一次,并且每个变量都按照签名中给出的顺序使用,则可以使用\u
替换每个变量,并删除签名,因为它没有歧义
由于您使用的代码示例与《Scala编程》一书中使用的代码示例非常相似,因此您可能希望回到“8.5占位符语法”一章,在该章中对其进行详细解释