Почему `scala .util.Try (date)` не возвращает `Failure`, когда` date` не определена? - PullRequest
0 голосов
/ 30 апреля 2020

Почему scala.util.Try(date) не возвращает Failure, как я ожидал бы, например, как scala.util.Try(3/0) возвращает Failure(java.lang.ArithmeticException: / by zero)?

Это то, что я вижу в своем REPL

scala> scala.util.Try(3/0)
res5: scala.util.Try[Int] = Failure(java.lang.ArithmeticException: / by zero)

scala> scala.util.Try(date)
                      ^
       error: not found: value date

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020
scala.util.Try(date)
not found: value date

- глупая ошибка компилятора (вы не объявили переменную даты и используете ее), а не исключение времени выполнения Где как

scala.util.Try(3/0) 

Failure(java.lang.ArithmeticException: / by zero): scala.util.Try[Int]

исключение времени выполнения

См. Другие примеры: Пример 1:

val dateFmt1 = "yyyyy   xx"
scala.util.Try {  
    val date = new Date
    val sdf = new SimpleDateFormat(dateFmt1)
    sdf.format(date)
}

вызовет RuntimeException, как это

    Failure(java.lang.IllegalArgumentException: Illegal pattern character 'x'): scala.util.Try[String]

Пример 2:

val dateFmt = "yyyy-MM-dd"
scala.util.Try {  
    val date = new Date
    val sdf = new SimpleDateFormat(dateFmt)
    sdf.format(date)
}

приведет к:

Success(2020-04-30): scala.util.Try[String]

См. исключение статья здесь для лучшего понимания

3 голосов
/ 30 апреля 2020

Трудно определить разницу, потому что время выполнения происходит сразу после времени компиляции в REPL, но это потому, что дата пропущенного значения является ошибкой времени компиляции, а Failure представляет ошибку времени выполнения.

...