gpt4 book ai didi

Scala _ 占位符(这段代码如何运作?)

转载 作者:行者123 更新时间:2023-12-04 13:02:01 28 4
gpt4 key购买 nike

我正在学习 Scala(主要来自 Java 的背景)。我正在尝试围绕以下代码进行思考:

object Main {
def main(args : Array[String]) {
for (file <- filesEnding(".txt"))
println(file.getName)
}

private val filesHere = (new java.io.File(".")).listFiles

def filesMatching(matcher: String => Boolean) =
for (file <- filesHere; if matcher(file.getName))
yield file

def filesEnding(query: String) = filesMatching(_.endsWith(query))
/* Other matcher functions */
}

特别是我很困惑 Scala 在哪里获得 _ 的值在每个匹配器函数中。我可以看到 filesEnding使用参数 .txt 调用.该参数分配给 query . filesEnding然后调用 filesMatching具有与 String => Boolean 一致的参数功能。最后我可以看到 file.getName最终取代 _占位符。

我不明白的是 Scala 怎么知道把 file.getName代替 _ .我无法在脑海中跟踪这段代码,而 Eclipse 调试器在这种情况下并没有多大帮助。有人可以告诉我这段代码中发生了什么吗?

最佳答案

_只是制作匿名函数的简写:

_.endsWith(query)

和匿名函数一样
fileName => fileName.endsWith(query)

然后将该函数作为参数提供 matcherfilesMatching .在该函数中,您可以看到调用
matcher(file.getName)

这将使用 file.getName 调用匿名函数作为 _参数(在显式示例中我称之为 fileName)。

关于Scala _ 占位符(这段代码如何运作?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880407/

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