[英]Can someone help me understand this snippet of code?
从根本上说,我知道这段代码的作用,但我试图完全理解 withTempDir 中的逻辑。
private def withTempDir(input: File => Unit): Unit = {
val tempFolder = Files.createTempDirectory("temporalOutput")
tempFolder.toFile.deleteOnExit()
input(tempFolder.resolve("output").toFile)
}
withTempDir {
x =>
println(x.getAbsoluteFile.toString)
}
input(tempFolder.resolve("output").toFile)
真的需要吗? 它的目的是什么? 可能只是tempFolder.resolve("output").toFile
吗?
input(tempFolder.resolve("output").toFile) 真的需要吗?
是的。
它的目的是什么?
基本上,一切。
稍后我会展开。
可以只是 tempFolder.resolve("output").toFile 吗?
不; 那根本不会做任何事情。
withTempDir
的要点是为您提供某种“范围” ,您可以在其中访问临时文件夹,您可以根据需要使用该文件夹; 程序完成执行后,此类文件夹(及其所有内容)将被删除。
因此,如您所见,您可以像这样使用函数:
withTempDir { folder =>
// Do whatever with folder here
???
}
所以, withTempDir
的参数本身就是一个函数,逻辑; 在这种情况下以 lambda 的形式出现。 在临时文件夹创建并配置为删除后(顺便说一句,以一种非常原始的方式) ,在withTempDir
的主体中,它调用传递给它的函数。
如果您对 lambda、函数和高阶函数感到困惑,我鼓励您选择任何Scala课程/教程/书籍,这是该语言的 101 知识。
在最后一行input
private def withTempDir(input: File => Unit): Unit = {
val tempFolder = Files.createTempDirectory("temporalOutput")
tempFolder.toFile.deleteOnExit()
input(tempFolder.resolve("output").toFile)
}
代码
withTempDir {
x =>
println(x.getAbsoluteFile.toString)
}
是相同的
val tempFolder = Files.createTempDirectory("temporalOutput")
tempFolder.toFile.deleteOnExit()
println(tempFolder.resolve("output").toFile.getAbsoluteFile.toString)
在最后一行中,函数input
即当前x => println(x.getAbsoluteFile.toString)
被应用于x
为tempFolder.resolve("output").toFile
。
如果您在withTempDir
的最后一行删除input
,即您刚刚
private def withTempDir(input: File => Unit): Unit = {
val tempFolder = Files.createTempDirectory("temporalOutput")
tempFolder.toFile.deleteOnExit()
tempFolder.resolve("output").toFile
}
然后withTempDir
根本不依赖于input
,所以它就像
private def withTempDir/*(input: File => Unit)*/: Unit = {
val tempFolder = Files.createTempDirectory("temporalOutput")
tempFolder.toFile.deleteOnExit()
tempFolder.resolve("output").toFile
}
然后在
withTempDir {
x =>
println(x.getAbsoluteFile.toString)
}
将withTempDir
应用于x => println(x.getAbsoluteFile.toString)
没有多大意义,它与withTempDir
相同,即
val tempFolder = Files.createTempDirectory("temporalOutput")
tempFolder.toFile.deleteOnExit()
tempFolder.resolve("output").toFile
当您定义private def withTempDir(input: File => Unit): Unit
时,这意味着您可以将withTempDir
应用于不同的函数input: File => Unit
。
withTempDir
是所谓的高阶函数,因为它接受另一个函数。
https://docs.scala-lang.org/tour/higher-order-functions.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.