为什么会出现此错误:类型不匹配;找到:需要的单位:String =>单元

时间:2015-06-04 16:05:20

标签: scala

代码如下:

object gen {
  println("Welcome to the Scala worksheet")

  case class CS(funToRun: String => Unit)

  val l: List[CS] = List(

    CS(open("filePath"))

    )

  def open(path: String): Unit = {
    java.awt.Desktop.getDesktop.open(new java.io.File(path))
  }
}

导致编译器错误:

type mismatch; found : Unit required: String => Unit

但是我的open函数属于String => Unit类型,而funToRun的param类型是String => Unit

1 个答案:

答案 0 :(得分:4)

CS接受StringUnit的功能,但您将open的结果传递给它Unit

如果您想将open作为函数传递,则需要执行以下操作:

CS(open)

虽然不知道你想要实现什么,但提供合理的解决方案是不可能的。

以后执行open操作的可能替代方法

case class CS(funToRun: () => Unit) // the function is not taking parameters any longer
val cs = CS(() => open("filePath")) // 'open' is not performed here
cs.funToRun() // 'open' is performed here

这样,open函数在传递给CS构造函数时不会被评估。