Kotlin: Inline-Lambda- und Überlast-Auflösungsambiguität

9

Ich habe ein einfaches Fabrikmuster, bei dem die Implementierung durch Überladungsauflösung bestimmt wird. Problem ist, dass der Kotlin-Compiler mit "Überladungsauflösung Ambiguität" für das Inline-Lambda klagt.

%Vor%

Wie löst der Kotlin-Compiler die Überladungsauflösung auf und warum wird das Inline-Lambda als mehrdeutig angesehen?

    
Tomas Karlsson 01.03.2016, 20:11
quelle

1 Antwort

4

Der Kotlin-Compiler löst jeden Ausdruck nur einmal auf. Wenn also der Compiler die Auflösung für den Lambda-Ausdruck startet, sollte er Typen von Lambda-Argumenten kennen. Aus diesem Grund sollte der Compiler eine der Methoden create wählen, bevor in lambda hineinschaut.

Beispiel:

%Vor%

Hier können wir keine der Funktionen foo auswählen, da keiner von ihnen spezifischer als der andere ist, sodass wir die Auflösung für den Lambda-Ausdruck nicht starten können, weil wir den Typ für it nicht kennen.

In Ihrem Beispiel ist es theoretisch möglich, die Auflösung für Lambda vor der Auswahl einer bestimmten Funktion zu starten, da für alle möglichen Funktionen die Typen von Lambda-Argumenten gleich sind. Aber es ist eine unlogische Logik, die sich nur schwer implementieren lässt.

    
erokhins 03.03.2016, 20:25
quelle