加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 隐式转换为Runnable?

发布时间:2020-12-16 09:34:02 所属栏目:安全 来源:网络整理
导读:作为一个练习,我试图创建一个隐式转换,接受一个函数并产生一个Runnable。这样你可以调用接受Runnable对象的Java方法,并使用它们像闭包。 隐式转换很容易: implicit def funToRunnable(fun : Unit) = new Runnable() { def run = fun } 但是我不知道如何
作为一个练习,我试图创建一个隐式转换,接受一个函数并产生一个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"))

不是合法的语法。

解决方法

刚才回答我自己的问题。我实现了隐式转换不正确。正确的实现是

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

你这样称呼:

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

这产生“12”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读