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” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- vim phpdoc multiline comment autoindent
- scala – 为什么2.11.1失败并显示错误:找不到:type Appli
- AngularJS -- Promise对象($q介绍)
- axis2通过城市名称调用.net写的asmx WebService查询天气实例
- 验证是否在Angular2中选中了输入复选框
- innodb数据库批量转换表引擎为MyISAM
- 单元测试 – 如何使用Mocha测试AngularJS代码?
- 一款bootstrap支持选择多文件上传的控件
- wget下载https文件,服务器可以虚拟机中不行的问题
- bash – 在大型(30G)单行文件上运行sed会返回空输出