Компилятор Scala в настоящее время не может выводить возвращаемые типы рекурсивных методов, как в следующем коде
def foo(i:Int) = if (i > 0) foo (i-1) else 0
Есть ли какая-либо амбициозность в приведенном выше утверждении? (т.е. возможен ли какой-либо другой тип, кроме Int
?)
Я могу представить, что в более сложном примере будет сложно вывести тип.
Можно ли дополнительно охарактеризовать случаи рекурсивных методов, где мы можем (не) выводить типы?
[EDIT:] Компилятор достаточно умен, чтобы понять, что String
неверно.
scala> def foo(i:Int):String = if (i > 0) foo (i-1) else 0
<console>:5: error: type mismatch;
found : Int(0)
required: String