Ошибка Scala - выражение типа Unit не соответствует ожидаемому типу File - PullRequest
0 голосов
/ 30 января 2019

У меня есть следующий код:

var tempLastFileCreated: File = try {
  files(0)
} catch {
  case e: ArrayIndexOutOfBoundsException => ???
}

, где files равно val files: Array[File] = dir.listFiles()

Теперь, что бы я ни дал в case e, я получаю сообщение Expression of type Unit doesn't conform to expected type File

Я понимаю, что правая часть => должна быть чем-то типа File.

Может кто-нибудь сказать мне, что туда поставить?

1 Ответ

0 голосов
/ 30 января 2019

Вы обещаете, что tempLastFileCreated - это File, поэтому оно также не может быть Unit или String и т. Д. У вас есть пара вариантов.Вместо этого вы можете использовать Option[File]:

val tempLastFileCreated: Option[File] = try {
      Some(files(0))
    }
    catch {
      case e: ArrayIndexOutOfBoundsException => None
    }

Или, например, если вы хотите сохранить сообщение об ошибке, другой вариант - использовать Either:

val tempLastFileCreated: Either[String, File] = try {
      Right(files(0))
    }
    catch {
      case e: ArrayIndexOutOfBoundsException => Left("index out of bounds!")
    }

Независимо от того,Лучше всего подходит для ваших нужд.Возможно, вы захотите взглянуть на тип данных Scala scala.util.Try, который безопаснее.Например,

val tempLastFileCreated: Option[File] = Try(files(0)) match {
  case Success(file) => Some(file)
  case Failure(throwable) => None //or whatever
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...