作为一项练习,我尝试创建一个隐式转换,它将接受一个函数并生成一个
隐式转换是足够简单的:
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"))
不是合法的语法。