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