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

时间:2011-04-21 18:48:05

标签: scala import 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
        }
    }
}

问题是,当我使用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
}

这里是Acceptable

import java.io.File

trait Acceptable {
    def accept(f:File):Boolean
}

我不明白为什么在导入后我需要分号。

也许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

1 个答案:

答案 0 :(得分:4)

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