Это происходит потому, что во втором случае вы не указали окончательную else
деталь.В этом случае тип возвращаемого значения этой отсутствующей ветви будет Unit
.Таким образом, компилятор Scala выводит AnyVal
в качестве общего родителя для Int
и Unit
.
. Вы можете попытаться добавить явный тип возврата к сигнатуре функции:
def signum(arg: Int): Int = ...
.не компилируется со следующей ошибкой:
found : Unit
required: Int
else if(arg == 0) 0
^
one error found
Таким образом, компилятор сообщает, что тип результата последнего if
на самом деле Unit
, а не Int
.