gpt4 book ai didi

scala - 隐式转换为Runnable?

转载 作者:行者123 更新时间:2023-12-03 13:42:43 27 4
gpt4 key购买 nike

作为练习,我尝试创建一个隐式转换,该转换将接受一个函数并产生一个Runnable。这样,您可以调用接受Runnable对象并将其像闭包一样使用的Java方法。

隐式转换很容易:

    implicit def funToRunnable(fun : Unit) = new Runnable() { def run = fun }


但是我不知道怎么称呼它。如何传递不返回单位的no-arg函数,而又不立即对其求值?例如,我希望以下显示“ 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"))


不是合法的语法。

最佳答案

arg,请回答我自己的问题。我错误地实现了隐式转换。正确的实现是

implicit def funToRunnable(fun: () => Unit) = new Runnable() { def run() = fun() }


您这样称呼它:

save(() => print("2"))


这将产生“ 2”

关于scala - 隐式转换为Runnable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3073677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com