В Scala абсолютно все нуждается в обратном типе.
println
например, имеют тип возврата Unit
, потому что это единица вычислений, которая не возвращает значение.
Если все должно иметь тип возвращаемого значения, то, как бы реализовать такую функцию ???
, так что он может быть использован любой функции, независимо от того, какой тип он не должен возвращаться?
Ну вот что Nothing
для, это подтип каждых других типов (как Any
это верхний типа любого другого типа), так что функция, которая возвращает Nothing
можно использовать в любом месте, и система типа всегда будет оставаться последовательной ,
Как вы уже заметили, функции, возвращаемые Nothing
, никогда не возвращают значение. Это связано с тем, что для Nothing
нет значения.
Вы можете видеть это как способ сделать компилятор «счастливым» для функций, которые только бросают или останавливают приложение или цикл навсегда.
В случае, если вы удивляетесь, почему мы не используем Unit
вместо Nothing
, вот пример:
def notYetImplemented: Unit = throw new Exception()
def myFunc: String = notYetImplemented
Это не будет компилироваться, так как Unit
не String
или подтип String
. Так что вам нужно будет сделать:
def myFunc: String = {
notYetImplemented
null
}
Что не очень удобно и для нас, чтобы написать значение, чтобы вернуться даже преподается мы никогда не достигнем этого кода.
Приветствия
Возможный дубликат [Использование Null/Nothing/Unit в Scala] (http://stackoverflow.com/questions/16173477/usages-of-null-nothing-unit-in-scala) – Mohitt
Метод, который _returned_ an исключение будет выглядеть как 'def foo = new RuntimeException'. Если вы дали ему подпись типа ': Nothing', он не будет компилироваться, потому что он что-то возвращает. –