Scala - 分号不一致

时间:2014-01-25 20:33:45

标签: scala syntax

我有这个非常简单的代码(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

我在使用分号时非常困惑。我有其他类似的代码,它没有任何问题编译没有任何分号。

有人可以解释这个特定的错误并详述所有需要分号的情况吗?

4 个答案:

答案 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人,所以也许这就是为什么它没有进行全谱线结束检测。