是否可以使用以下Scala代码示例?
{ println("done!") }.asInstanceOf[() => Any]
实现这一目标的最简洁方法是什么?
编辑:我的目标是获得一个更短的闭包表达式而不是()=> {...}。我想摆脱()=> 部分。
编辑2:为您提供一些用例示例:
implicit class Closure(func: () => Any) {
def asRunnable = new Runnable { override def run() = func() }
def asThread = new Thread(asRunnable)
def run = asThread.start()
}
(() => println("something")).run
答案 0 :(得分:2)
怎么样:
val f1 = () => println("done!") // () => Unit = <function0>
val f2 : () => Any = () => println("done!") // with explicit type () => Any = <function0>
答案 1 :(得分:2)
您可以使用名字参数:
def block[A](f: => A): () => A = () => f
block { println("done!") }
除block
不短于() =>
且较短的名称不太清楚(IMO)。
您的用例将变为
implicit class Closure(func: => Any) {
def asRunnable = new Runnable { override def run() = func }
def asThread = new Thread(asRunnable)
def run = asThread.start()
}
当然,如果块的类型已经具有您调用的方法,则不会应用转换!例如。 { new Runnable { def run() = ... } }.run
将无法启动新主题。