Scala:代码块可以转换为闭包吗?
下面的Scala代码示例可能吗Scala:代码块可以转换为闭包吗?,scala,closures,Scala,Closures,下面的Scala代码示例可能吗 { println("done!") }.asInstanceOf[() => Any] 实现这一目标最简单的方法是什么 Edit:我的目标是得到一个比()=>{…}更短的闭包表达式。我想去掉()=>部分 编辑2:为您提供一个小用例示例: implicit class Closure(func: () => Any) { def asRunnable = new Runnable { override def run() = func() }
{ println("done!") }.asInstanceOf[() => Any]
实现这一目标最简单的方法是什么
Edit:我的目标是得到一个比()=>{…}更短的闭包表达式。我想去掉()=>部分
编辑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
那么:
val f1 = () => println("done!") // () => Unit = <function0>
val f2 : () => Any = () => println("done!") // with explicit type () => Any = <function0>
val f1=()=>println(“完成!”)/()=>Unit=
val f2:()=>Any=()=>println(“done!”)//带有显式类型()=>Any=
关于:
val f1 = () => println("done!") // () => Unit = <function0>
val f2 : () => Any = () => println("done!") // with explicit type () => Any = <function0>
val f1=()=>println(“完成!”)/()=>Unit=
val f2:()=>Any=()=>println(“done!”)//带有显式类型()=>Any=
您可以为此使用按名称参数:
def block[A](f: => A): () => A = () => f
block { println("done!") }
除非块
不短于()=>
,而且较短的名称不太清晰(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
不会启动新线程。您可以为此使用按名称参数:
def block[A](f: => A): () => A = () => f
block { println("done!") }
除非块
不短于()=>
,而且较短的名称不太清晰(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
不会启动新线程。不错,但我想这不是我想要的。我在我的问题中添加了一些注释以供澄清。实现代码块到闭包的转换的笨拙方法也可以,因为如果你知道我的意思,这最终可以通过某种隐式转换来完成。@Gerhardhager yea,我理解。你能展示一下这样的代码的使用示例吗?我在我的问题中添加了一个用例示例。很好,但我不知道这正是我想要的。我在我的问题中添加了一些注释以供澄清。实现代码块到闭包的转换的笨拙方法也可以,因为如果你知道我的意思,这最终可以通过某种隐式转换来完成。@Gerhardhager yea,我理解。你能展示一下这样的代码的使用示例吗?我在我的问题中添加了一个用例示例。