Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 获得;错误:类型不匹配;找到:所需单位:()=>;单位「;回拨_Scala_Types_Callback - Fatal编程技术网

Scala 获得;错误:类型不匹配;找到:所需单位:()=>;单位「;回拨

Scala 获得;错误:类型不匹配;找到:所需单位:()=>;单位「;回拨,scala,types,callback,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 Da

我刚开始学习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}
  }
}

唯一的区别是,日期在第二行中打印一次,而在第一行中返回并在回调中打印。

区别在于这一行:

timer(println(frenchDate))
正在尝试调用
println(法语)
,并使用返回值(即
Unit
)作为传递给
计时器的回调。您可能想要:

timer(() => println(frenchDate))
或者可能

timer(() => { println(frenchDate) })
(我不是Scala开发人员,所以我不确定语法是否正确,但我对当前代码中的错误非常有信心:)

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

timer { () => println(frenchDate) }

两者都应该可以工作(尽管我将它写成
timer{()=>println(frenchDate)}
),您也可以将它声明为def timer(callback:=>Unit)={…callback;…},并使用timer(println(frenchDate))(或timer{println(frenchDate)},以您更喜欢的方式)调用,最后按照didierd在这里的评论进行了。