Scala io.Source.FromFile возвращает какие-либо исключения? - PullRequest
5 голосов
/ 30 апреля 2011

Я просматривал свой код в последний раз в поисках исключений, когда остановился на этой строке кода:

var list: Array[String] = Source.fromFile(this.Path).getLines.toArray

Я искал в документации по scala-lang, но, похоже, ни один из методовэтой строки выбрасывает любой тип ioException ... Как это возможно?

РЕДАКТИРОВАТЬ:

try {
  var list: Array[String] = Source.fromFile("").getLines.toArray
}
catch {
  case ex:Exception => println(ex.getMessage)
}

ничего не печатает, почему?

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

Проверенные исключения применяются javac, JVM на самом деле не знает о них.И в отличие от Java, Scala не заботится о проверенных исключениях.

Посмотрите, например, Источник , вы не заметите код, связанный с исключениями.Что-то, что невозможно в старой доброй Java, для чего потребуются предложения try / catch s или throws.

Несмотря на это, автор библиотеки Scala может по-прежнему хотеть убедиться, что пользователи Java проверяют наличиеэти исключения, так что есть аннотация @ throws , которая позволяет вам объявить, что метод может выдать исключение, как throws предложение Java.Не забывайте, что @throws предназначен только для Java.

Вы также можете взглянуть на scala.util.control.Exception .Он содержит всевозможные вкусности для работы с исключениями.

1 голос
/ 30 апреля 2011

Source.fromFile вызывает java.io.FileInputStream.open, который выдает FileNotFoundException, если вы даете ему несуществующий файл.

Source.fromFile не улавливает это, поэтому это будет видно в вашем коде.

Я подозреваю, что многие другие исключения, возможные в пакете java.io, аналогичным образом не обрабатываются, но, по-видимому, недокументированы.

...