Quicksort, сортировка слиянием , и большая часть другого N-журнала N виды.
Хотя Ничто
является подтипом всего, оно не наследует любым методом, кроме Любой
. Это потому, что Ничто
больше не ориентировано на функциональную сторону языка. Это необходимо для таких вещей, как Option
и List
, но только как тип , а не как класс.
Различие здесь немного странное для тех исходит из объектно-ориентированного фона, но факт в том, что подтипирование как концепция очень отличается от ООП. Конечно, объектно-ориентированный подход подразумевает подтипирование в той или иной форме, но обратное неверно. Типы и языки программирования Бенджамина Пирса хорошо справляются с задачей представления языка F_ < (произносится как «F sub»), который служит минимальным примером языка с подтипами (но не OO).
Теперь, со всем сказанным, я согласен с тем, что Ничего
невосприимчив к нормальным правилам наследования, действительно кажется немного непоследовательным. Однако с теоретической точки зрения это имеет смысл.
Я полагаю Ничто
не могло принять какой-либо метод и выполнить стандартную операцию над всеми из них (выброс исключения). Однако это было бы не очень полезно.
Представляя ошибку компиляции, компилятор предупреждает программиста, что тип, который ему, скорее всего, не нужен, Nothing
, каким-то образом был выведен при определенном точка в коде.
Вы можете вызвать toString
для переменной Nothing
из-за ее определения:
final trait Nothing extends Any
And toString является членом из Любые
. Я думаю, что компилятор scala обрабатывает Nothing
только в границах типов и рассматривает его как любую другую черту во всех случаях. Я думаю, что разрешение вызывать любой метод для переменной с типом Nothing
будет очень странным.