2011-04-21 61 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完全兼容。

相關問題