得到“错误:类型不匹配;找到:需要单位:()=>单位”在回调上

时间:2011-09-27 16:00:52

标签: scala types 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}
  }
}

带来错误

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()中打印出来,而在第一次回复中打印出来并打印出来。

1 个答案:

答案 0 :(得分:6)

区别在于这一行:

timer(println(frenchDate))

正在尝试调用println(frenchDate)并使用返回值(Unit)作为要传递给timer的回调。你可能想要:

timer(() => println(frenchDate))

或可能

timer(() => { println(frenchDate) })

(我不是Scala开发人员,因此我不确定正确的语法,但我对您当前代码中的错误非常有信心:))

编辑:根据评论,这也应该有效,可能更惯用:

timer { () => println(frenchDate) }