Зачем мне нужны точки с запятой после этих импортирований?

#scala #import #traits

#scala #импорт #Трейты

Вопрос:

Я никогда особо не использовал черты в Scala до сих пор, и я хочу это изменить. У меня есть этот код:

 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
  

Комментарии:

1. Когда я добавляю «true» после «// дополнительная работа, чтобы проверить, действительно ли это изображение», оно отлично компилируется с fsc в Scala 2.9.0 RC1.

2. На моем компьютере у меня там true. Я только хотел сократить фрагмент.

3. Это может быть проблема с окончанием строки — возможно, вы случайно сохранили свой файл со старыми окончаниями строк Macintosh ( r)? Это на самом деле приводит именно к той ошибке, которую вы видите.

4. Невероятная отладка voodoo! Хотя я понятия не имею, как окончание получилось в формате Macintosh. Пожалуйста, добавьте ответ, чтобы я мог его принять.

Ответ №1:

Когда компилятор scala обнаруживает строку Macintosh, заканчивающуюся на-being r , компилятор scala ошибочно объявляет необходимость в точке с запятой, как и сделал вывод Мориц. В разделе 1.2 справочного руководства по Scala описаны правильные символы новой строки. Я не смог найти в Ссылке, какие символьные литералы рассматривались как новые строки. По опыту, приемлемы как Windows ( rn ), так и Unix ( n ). Предположительно scala строго совместим с Java в этом отношении.