當編譯這個片段,Scala編譯器將發出以下警告的ETA擴展:零參數法值的編譯時棄用警告:零參數方法
ETA-膨脹已棄用。你有沒有 打算寫Main.this.porFiles5()? [警告] timerFunc(porFiles5)
它發生時,我將一個功能傳遞給另一個簡單的時間。定時器功能採用無參數功能返回單元,在此行:timerFunc(porFiles5)
。這個警告是否必要?避免它的慣用方法是什麼?
package example
import java.nio.file._
import scala.collection.JavaConverters._
import java.time._
import scala.collection.immutable._
object Main extends App {
val dir = FileSystems.getDefault.getPath("C:\\tmp\\testExtract")
def timerFunc (func:()=>Unit) = {
val start = System.currentTimeMillis()
timeNow()
func()
val finish = System.currentTimeMillis()
timeNow()
println((finish - start)/1000.0 + " secs.")
println("==================")
}
def porFiles5(): Unit = {
val porFiles5 = Files.walk(dir).count()
println(s"You have $porFiles5 por5 files.")
}
def timeNow(): Unit = {
println(LocalTime.now)
}
timeNow()
timerFunc(porFiles5)
timeNow()
}
FWIW我會建議改變'timerFunc'只取一個名字參數例如'=>單位'。它可以根據需要延遲參數的執行,並很好地迴避了在函數中明確包裝某些東西的需要。 – badcook
@badcook thx。你的意思是這樣(只是爲了確認):'timerFunc2(func:=> Unit):Unit {...}'? – s952163
沒錯,雖然'func'不再是個好名字:) – badcook