我有这个非常简单的代码(scala-2.10):
import scala.io.Source
object Test2 {
def main(args: Array[String]): Unit = {
for(line <- Source.fromFile("/Users/alexei/words.txt", "utf-8").getLines()) {
println(line)
}
}
}
编译时收到此错误消息:
Test2.scala:3: error: ';' expected but 'object' found.
object Test2 {
^
one error found
我在使用分号时非常困惑。我有其他类似的代码,它没有任何问题编译没有任何分号。
有人可以解释这个特定的错误并详述所有需要分号的情况吗?
答案 0 :(得分:4)
代码对我来说效果很好。
您需要分号的唯一时间是在同一行上写多个语句。否则,换行符表示分离。因此,您当前的代码中不需要任何分号,但如果您想这样做,则需要这样的分号:
println(line); println(line)
而不仅仅是
println(line)
println(line)
答案 1 :(得分:1)
您可能想要将此标记为
http://jittakal.blogspot.com/2012/07/scala-rules-of-semicolon-inference.html
我不明白为什么它抱怨,因为你的对象行是一行的开头,不在括号内,而前一行是完整的
有时编译器可能会感到困惑,你需要用括号分组,但我在这里看不到。
答案 2 :(得分:1)
出于某种原因,我的编辑器的行结尾在Sublime Text 3中搞砸了。我在vim中打开了文件,整个文件被表示为一行(^ M作为新行字符)。
我必须在Vim中运行以下内容来修复行结尾
:%s/\r/\r/g
这意味着根据dhg上面的回答,语句需要用分号分隔。
因为我认为这些陈述是在各自不同的行上,所以我没有放置任何分号,这就是我的错误所在。
感谢Senia指出这种可能性。
答案 3 :(得分:0)
编译器碰巧使用LF或FF来进行EOL和分号推理(实际上是nl
推理)。
它忽略了CR-LF序列中的CR。
这有效:
import scala.io.Source^Lobject Test
关于Scala中的行结尾有一些相关的问题,这太糟糕了,因为它感觉像黑暗时代。您可以与手机通话,但Scala无法找出我的源文件编码?
对于vim,请参阅Command line option to open mac formatted file in Vim
Odersky是一个emacs人,所以也许这就是为什么它没有进行全谱线结束检测。