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

问题描述 投票:5回答:1

到目前为止,我在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 import traits
1个回答
4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.