为什么Scala的分号推论在这里失败?
发布时间:2020-12-16 09:33:48 所属栏目:安全 来源:网络整理
导读:在使用Scala 2.7.3编译以下代码时, package spojobject Prime1 { def main(args: Array[String]) { def isPrime(n: Int) = (n != 1) (2 to n/2 forall (n % _ != 0)) val read = new java.util.Scanner(System.in) var nTests = read nextInt // [*] while(
在使用Scala 2.7.3编译以下代码时,
package spoj object Prime1 { def main(args: Array[String]) { def isPrime(n: Int) = (n != 1) && (2 to n/2 forall (n % _ != 0)) val read = new java.util.Scanner(System.in) var nTests = read nextInt // [*] while(nTests > 0) { val (start,end) = (read nextInt,read nextInt) start to end filter(isPrime(_)) foreach println println nTests -= 1 } } } 我得到以下编译时错误: PRIME1.scala:8: error: illegal start of simple expression while(nTests > 0) { ^ PRIME1.scala:14: error: block must end in result expression,not in definition } ^ two errors found 当我在文章末尾添加一个分号作为[*]时,该程序编译正常。任何人都可以解释为什么Scala的分号推论不能在特定的行上工作? 解决方法
是因为scala假设您在调用readInt时使用语法foo b(相当于a.foo(b))。也就是说,它假定while循环是readInt的参数(记住每个表达式都有一个类型),因此最后一个语句是一个声明:
var ntests = read nextInt x wherex是你的while块。 我必须说,作为一个优先选择,我现在已经重新使用通常的a.foo(b)语法,除非专门用于设计使用的DSL(像演员的一个!b)。它使事情变得更加清晰,你不会被这样的怪异的东西咬伤! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 单元测试 – Play Framework 2 scala specs2 mockito,如何编
- angularjs – angular-socket-io io未定义
- AngularJS 学习笔记(3)-指令(Directive)
- 第五篇Bootstrap 排版
- axis2 webservice学习笔记三
- ruby – 从Docker容器登录macOS中的syslog/console?
- WebService系列博客{二}[通过注解更改Wsdl文件、更改包名ws
- 什么“预计不会在角区,但它是!”错误意味着什么?
- angularjs – mdbottomsheet禁用向下拖动以关闭
- shell – Vim:使用外部命令并处理错误