#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 в этом отношении.