Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala占位符调用所需的代码解释_Scala - Fatal编程技术网

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占位符语法”一章,在该章中对其进行详细解释