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