[英]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.