jaz*_*090 3 types scala callback
我刚刚开始阅读有关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}
}
}
Run Code Online (Sandbox Code Playgroud)
带来错误
error: type mismatch;
found : Unit
required: () => Unit
println(frenchDate)
Run Code Online (Sandbox Code Playgroud)
而以下工作
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}
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是日期frenchDate()在第二次打印出来,而在第一次回调中返回并打印.
区别在于这一行:
timer(println(frenchDate))
Run Code Online (Sandbox Code Playgroud)
试图调用println(frenchDate)并使用返回值(即Unit)作为要传递的回调timer.你可能想要:
timer(() => println(frenchDate))
Run Code Online (Sandbox Code Playgroud)
或者可能
timer(() => { println(frenchDate) })
Run Code Online (Sandbox Code Playgroud)
(我不是Scala开发人员,所以我不确定正确的语法,但我对你当前代码中的错误很有信心:)
编辑:根据评论,这也应该工作,可能更惯用:
timer { () => println(frenchDate) }
Run Code Online (Sandbox Code Playgroud)