2014-01-25 21 views
1

我有一个非常简单的代码(斯卡拉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

你正在使用哪个版本的scala? –

+0

编辑了我的问题要添加的版本 – arnm

+0

看起来不错,这是一个'.scala'文件,你通过scala编译器推动? –

回答

3

该代码对我来说工作得很好。

您需要分号的唯一时间是当您在同一行上写入多个语句时。否则,换行符表示分离。所以,如果你想做到这一点,你并不需要在当前的代码中的任何分号,但如果你将:

println(line); println(line) 

而不是仅仅

println(line) 
println(line) 
+0

我接受了这个答案,因为这是我提供的信息中最好的。请查看我的答案以获取有关该问题的更多详细信息。 – arnm

1

出于某种原因,我的编辑器的行尾在Sublime Text 3中混乱了。我在vim中打开了文件,整个文件被表示为一行(^ M作为新行字符)。

我不得不运行以下Vim中修复行尾

:%s/\r/\r/g 

这意味着根据DHG的回答上面的语句需要用分号隔开。

因为我认为声明是自己单独的行我没有放置任何分号,这是在我的错误的来源。

感谢senia指出了这种可能性。

+0

这可能是因为你只有\ n。编译器可能期望\ r \ n。这很奇怪,因为我认为vim使用\ n作为它的换行符。 –

+0

你正在使用什么编辑器 –

+0

我使用的是Sublime Text 3,但我一定是偶然改变了一些设置。我进入vim并运行:%s/\ r/\ r/g来修复行结束符,现在一切正常 – arnm

0

编译器恰好采取LF或FF对EOL和分号推理的目的(这是真的nl推断)。

它忽略CR-LF序列中的CR。

这工作:

import scala.io.Source^Lobject Test 

已经有大约在Scala中,这是太糟糕行尾的几个相关的问题,因为它感觉像黑暗时代。你可以谈谈你的手机,但斯卡拉无法找出我的源文件编码?

对于VIM看到Command line option to open mac formatted file in Vim

Odersky的是Emacs的家伙,所以也许这就是为什么它没有做全谱行结束检测。