Вывод типа выбирает наименьший общий супертип, если метод возвращает разные типы.
Ваша функция f1
возвращает String
или null
, общим супертипом которого является String
, поскольку String
может иметь значение null
. Строка является подклассом AnyRef
, а AnyRef
s может иметь значения null
.
Ваша функция f2
возвращает Int
(подкласс AnyVal
) или null
, общим супертипом которого является Any
. Int
не может быть null
.
См. http://docs.scala -lang.org / tutorials / tour / unified-types.html для иерархии классов Scala.
Другой пример:
scala> def f3(b: Boolean) = if (b) 42
f: (b: Boolean)AnyVal
f3
возвращает
42 - b
true
или ()
, если b
равно false
.
Итак, типы, которые он возвращает: Int
и Unit
. Общий супертип - AnyVal
.