Компилятор Scala в настоящее время не может определить типы возвращаемых данных рекурсивных методов, как показано в следующем коде
def foo(i:Int) = if (i > 0) foo (i-1) else 0
Есть ли двусмысленность в приведенном выше утверждении?(т. е. возможен ли любой тип, отличный от Int
?)
Я могу представить, что в более сложном примере будет сложно вывести тип.
Можно ли дополнительно охарактеризовать случаи рекурсивных методов, когда мы можем (не) выводить типы?
[ПРАВИТЬ:] Компилятор достаточно умен, чтобы выяснить, что 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