【发布时间】:2011-03-05 15:49:21
【问题描述】:
作为练习,我尝试创建一个隐式转换,它可以接受一个函数并生成一个Runnable。这样您就可以调用接受Runnable 对象的Java 方法并像闭包一样使用它们。
隐式转换很简单:
implicit def funToRunnable(fun : Unit) = new Runnable() { def run = fun }
但是我不知道怎么称呼它。如何传入一个返回 Unit 的无参数函数,而不立即对其进行评估?例如,我希望以下打印“12”,但它打印“21”,因为print("2") 被立即评估。
var savedFun : Runnable = null
def save(r : Runnable) = { savedFun = r }
save(print("2"))
print("1")
savedFun.run()
我如何告诉编译器将print("2") 视为函数的主体,而不是立即评估的东西?我尝试过的一些可能性,比如
save(() => print("2"))
或
save(=> print("2"))
不是合法的语法。
【问题讨论】:
-
你的意思是“调用接受Runnables的java方法并像闭包一样将函数传递给它们”?因为接受其他函数的方法不称为闭包;它们接受的函数称为(有时)闭包。
标签: scala runnable implicit-conversion