1

В книге «функционального программирования в Scala», есть некоторые слова говорят о «проверяемое исключение»:Не ясно, о «Проверено исключения» объяснения в «функционального программирования в Scala»

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

Проверенные исключения Java, по крайней мере, вынуждают принять решение о том, следует ли обрабатывать или ререйзировать ошибку, но они приводят к значительному шаблону для вызывающих абонентов. Что еще более важно, они не работают для функций более высокого порядка, которые не могут быть осведомлены о конкретных исключениях, которые могут быть вызваны их аргументами. Например, рассмотрим функцию карты мы определили для списка:

def map[A,B](l: List[A])(f: A => B): List[B]

Эта функция, безусловно, полезна, весьма общий характер, а не в ладах с использованием проверяемых исключений - мы не можем иметь версию карты для каждое исключенное исключение, которое может быть выбрано f. Даже если бы мы захотели сделать это, как бы отображалась даже информация о том, какие исключения возможны? Вот почему общий код, даже на Java, часто используется при использовании RuntimeException или некоторых распространенных типов исключений.

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

Может ли кто-нибудь привести некоторые примеры, чтобы сделать его более понятным?

ответ

6

Попробуйте написать функцию map<A, B> на Java. В какой-то момент вам нужно будет вызвать функцию сопоставления. Ваша функция отображения может быть ничего и выбросить любое исключение, которое ему нравится. Функция map не может включать в свою подпись все возможные исключения, которые может отобразить картограф, поскольку он имеет . Не знаю, что это такое. Невозможно написать сигнатуру типа map с отмеченными исключениями.

Предположим, что подпись map была чем-то вроде Colletion<B> map<A, B>(Function<A,B>, Collection<A>). Предположим, что мы называем это map(x -> throw new IOException, Lists.of(1,2,3)). Так как IOException проверен, он должен появиться в сигнатуре map, но до тех пор, пока вы не позвонили map, он не знал, что это может исключить этот тип исключения.

 Смежные вопросы

  • Нет связанных вопросов^_^