这些导入后为什么需要分号?

Geo*_*Geo 5 import scala traits

到目前为止,我在Scala中从未真正使用Traits,我想改变它.我有这个代码:

import tools.nsc.io.Path
import java.io.File

trait ImageFileAcceptor extends FileAcceptor {
    override def accept(f:File) =  {
        super.accept(f) match {
            case true => {
                // additional work to see if it's really an image
            }
            case _ => false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我编译时sbt,我继续收到:

ImageFileAcceptor.scala:2: ';' expected but 'import' found.

如果我;在导入后添加,代码将编译.这是FileAcceptor:

import java.io.File

trait FileAcceptor extends Acceptable {
    override def accept(f:File):Boolean = f.isFile
}
Run Code Online (Sandbox Code Playgroud)

这是Acceptable:

import java.io.File

trait Acceptable {
    def accept(f:File):Boolean
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我在进口后需要分号.

编辑:也许sbt的输出是有帮助的:

[info] Building project tt 1.0 against Scala 2.8.1
[info]    using sbt.DefaultProject with sbt 0.7.5 and Scala 2.7.7
Run Code Online (Sandbox Code Playgroud)

tro*_*ine 4

当 scala 编译器遇到 Macintosh 行结尾 --being \r-- 时,scala 编译器将错误地声明需要分号,正如 Moritz 推断的那样。Scala 参考手册的 1.2 节描述了正确的换行符。我在参考文献中找不到哪些字符文字被视为换行符。根据经验,Windows ( \r\n) 和 Unix ( \n) 都可以接受。想必scala在这方面与Java是严格兼容的。