2011-04-21 64 views
5

到目前为止,我从来没有真正在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

当我在“//额外的工作,看看它是否真的是一个图像”之后添加“true”时,它在Scala 2.9.0 RC1下使用fsc进行编译。 – 2011-04-21 20:59:04

+0

在我的电脑上,我真的在那里。我只想缩短片段。 – Geo 2011-04-21 21:17:12

+10

这可能是一个行结束问题 - 您是否可能意外地将您的文件保存为旧的Macintosh行结尾(\ r)?这实际上产生了你所看到的错误。 – Moritz 2011-04-21 22:22:58

回答

4

当Scala编译器遇到的Macintosh行结束 - 是\r --the Scala编译器会错误地宣告需要一个分号,正如莫里茨所推断的那样。 Scala Reference Manual的1.2部分描述了正确的换行符。在参考文献中找不到字符文字被视为换行符。根据经验,Windows(\r\n)和Unix(\n)都可以接受。在这方面,推测scala与Java完全兼容。

相关问题