我刚刚开始阅读有关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()
中打印出来,而在第一次回复中打印出来并打印出来。
答案 0 :(得分:6)
区别在于这一行:
timer(println(frenchDate))
正在尝试调用println(frenchDate)
并使用返回值(Unit
)作为要传递给timer
的回调。你可能想要:
timer(() => println(frenchDate))
或可能
timer(() => { println(frenchDate) })
(我不是Scala开发人员,因此我不确定正确的语法,但我对您当前代码中的错误非常有信心:))
编辑:根据评论,这也应该有效,可能更惯用:timer { () => println(frenchDate) }