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