我刚开始学习有关 scala 的教程,但遇到了障碍。我将几个示例合并在一起,但出现错误,但不知道为什么。
import java.text.DateFormat._
import java.util.{Date, Locale}
object FrenchDate {
def main(args: Array[String]) {
timer(println(frenchDate))
}
def frenchDate():String = {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
df format now
}
def timer(callback: () => Unit) {
while(true) {callback(); Thread sleep 1000}
}
}
带来错误
error: type mismatch;
found : Unit
required: () => Unit
println(frenchDate)
虽然下面的工作
import java.text.DateFormat._
import java.util.{Date, Locale}
object FrenchDate {
def main(args: Array[String]) {
timer(frenchDate)
}
def frenchDate() {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
println(df format now)
}
def timer(callback: () => Unit) {
while(true) {callback(); Thread sleep 1000}
}
}
唯一的区别是日期是第二次在 frenchDate()
中打印出来,而第一次是在回调中返回并打印。
最佳答案
区别在于这一行:
timer(println(frenchDate))
正在尝试调用 println(frenchDate)
并使用返回值(即 Unit
)作为回调传递给 timer
。你可能想要:
timer(() => println(frenchDate))
或者可能
timer(() => { println(frenchDate) })
(我不是 Scala 开发人员,所以我不确定语法是否正确,但我对您当前代码中的错误很有信心:)
编辑:根据评论,这也应该有效并且可能更惯用:
timer { () => println(frenchDate) }
关于scala - 回调时获取 "error: type mismatch; found : Unit required: () => Unit",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7572166/