/ / Pourquoi les méthodes surchargées nécessitent-elles un type de résultat explicite? - scala, surcharge de méthode

Pourquoi les méthodes surchargées nécessitent-elles un type de résultat explicite? - scala, surcharge de méthode

Je sais, c’est plus un discours qu’une question, alors votez pour la clôture si vous ne ressentez pas ma douleur. Mais c’est tellement ennuyeux.

Je pense que cela réduirait beaucoup le stress que je ressens chaque fois que je reçois cette erreur, si quelqu'un pouvait raisonnablement m'expliquer Pourquoi cette exigence est réellement nécessaire.

Je l'obtiens (un peu) en cas de méthodes récursives, mais en quoi la surcharge est-elle si particulière?

Réponses:

0 pour la réponse № 1

L'annotation explicite du type de retour d'une méthode surchargée est requise uniquement lorsqu'elle appelle une méthode portant le même nom.

Par exemple. dans ce cas, vous devez annoter la seconde foo

def foo(x: Int, y: Int) = x + y
def foo(x: Int): Int = foo(x, 42) // return type is mandatory

mais dans ce cas vous ne

def foo(x: Int, y: Int) = x + y
def foo(x: Int) = x + 42

Je "spécule juste ici, mais ça a l'air trèssemblable au cas d’appel récursif, en ce sens qu’il suit le même esprit. Le type inferencer fonctionne localement et lorsqu'il voit à quoi il ressemble, un appel récursif (dans ce cas, un appel à une méthode du même nom), il s'arrête et demande un type explicite.

Je pense que les deux cas (appels récursifs et appels surchargés) découlent de la nature locale de l'algorithme d'inférence de type, qui n'échappera pas aux limites d'une définition de méthode pour en déduire le type.