scala – 为什么需要一个return语句才能正确评估while语句?
发布时间:2020-12-16 18:24:04 所属栏目:安全 来源:网络整理
导读:为什么需要一个return语句来允许这个while语句 评估得当吗?以下声明允许 import java.io.Fileimport java.io.FileInputStreamimport java.io.InputStreamimport java.io.BufferedReaderimport java.io.InputStreamReadertrait Closeable { def close ()}tra
为什么需要一个return语句来允许这个while语句
评估得当吗?以下声明允许 import java.io.File import java.io.FileInputStream import java.io.InputStream import java.io.BufferedReader import java.io.InputStreamReader trait Closeable { def close () } trait ManagedCloseable extends Closeable { def use (code: () => Unit) { try { code() } finally { this.close() } } } class CloseableInputStream (stream: InputStream) extends InputStream with ManagedCloseable { def read = stream.read } object autoclose extends App { implicit def inputStreamToClosable (stream: InputStream): CloseableInputStream = new CloseableInputStream(stream) override def main (args: Array[String]) { val test = new FileInputStream(new File("test.txt")) test use { val reader = new BufferedReader(new InputStreamReader(test)) var input: String = reader.readLine while (input != null) { println(input) input = reader.readLine } } } } 这会从scalac产生以下错误: autoclose.scala:40: error: type mismatch; found : Unit required: () => Unit while (input != null) { ^ one error found 似乎它试图在使用后将块视为一个 test use { val reader = new BufferedReader(new InputStreamReader(test)) var input: String = reader.readLine while (input != null) { println(input) input = reader.readLine } return } 应用程序按预期运行.任何人都可以向我描述发生了什么 解决方法
那是因为它的用法被声明为()=>单位,因此编译器期望您使用的块返回满足此签名的内容.
似乎你想要的是将整个块转换为一个名字参数,这样做改变def使用(代码:()=>单位)到def使用(代码:=>单位). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angular – ngFor在array.push之后显示空项
- Angular2,用于凉亭组件的SystemJS路径
- AngularJS UI-Router:在加载应用程序之前预加载$http数据
- docker基本映像:如何升级
- twitter-bootstrap – Bootstrap Carousel中的Youtube ifra
- angularjs – Angular bootstrap datepicker日期格式不格式
- 让Packery / Masonry使用angular2
- 将命令的输出拆分为bash中的关联数组
- 角度材料 – 角度材料2数据表设置为主 – 细节视图?
- shell的变量输入read讲解与实战