代码如下:
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
?
答案 0 :(得分:4)
CS
接受String
到Unit
的功能,但您将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
构造函数时不会被评估。