In Expert F # 2.0 von Don Syme, Adam Granicz und Antonio Cisternino, pg. 44
Inferenz eingeben: Mit der | & gt; Der Operator lässt den Informationsfluss von eingeben Eingabe von Objekten in die Funktionen, die diese Objekte manipulieren. F # verwendet Informationen, die aus der Typinferenz gesammelt werden, um eine Sprache zu lösen Konstrukte wie Eigenschaftenzugriffe und Methodenüberladung. Dies setzt voraus, dass Informationen durch den Text von links nach rechts weitergegeben werden eines Programms. Geben Sie insbesondere Informationen rechts neben einer Position ein wird nicht berücksichtigt, wenn der Eigenschaftszugriff und die Überladung aufgelöst werden.
Also klar mit | & gt; kann dazu beitragen, Rückschlüsse zu geben.
Wie immer ist es auch hilfreich, den Typ zu deklarieren.
Gibt es andere Mittel / Taktiken, die verwendet werden können, um F # Inferenz zu typisieren?
BEARBEITEN
Wie RamonSnir richtig bemerkt hat, soll man die Inferenz so viel Arbeit wie möglich machen lassen. Das Hinzufügen von Typdeklarationen, nur weil Sie können, ist nicht das, was man tun sollte. Nehmen Sie diese Frage oder Antworten nicht als etwas, was getan werden sollte. Ich habe die Frage gestellt, um zu helfen, die Nuance der Typinferenz besser zu verstehen und was in den Fällen hilfreich sein könnte, in denen Typinferenz Hilfe benötigt. Also, wenn Typ-Inferenz alle Arten ohne Hilfe auflösen kann, dann gebe es keine, aber wenn es so ist, wäre es nett, einige Wege zu kennen, um es zu helfen.
Einige Punkte:
1) Modulfunktionen den Eigenschaften und Methoden vorziehen.
%Vor%2) Methoden bevorzugen, ohne zu überladen. Zum Beispiel QuickLinq-Helfer definieren nicht überladene Mitglieder, die vermieden werden sollen eine Reihe von Typ Annotation in LINQ-Erweiterungsmethoden.
3) Verwenden Sie alle verfügbaren Informationen, um dem Typprüfer einige Hinweise zu geben.
%Vor%Das letzte Beispiel stammt aus einem ausgezeichneten Artikel über die F # Typ-Inferenz .
Zusammenfassend müssen Sie F # Type Checker nicht oft helfen. Wenn es einen Typfehler gibt, gibt die Zusammenfassung aus dem obigen Link eine gute Anleitung:
Also zusammenfassend die Dinge, die Sie tun können, wenn der Compiler ist sich über fehlende Typen oder nicht genug Informationen beschwert sind:
- Definieren Sie Dinge, bevor sie verwendet werden (dazu gehört, dass die Dateien in der richtigen Reihenfolge kompiliert werden)
- Legen Sie die Dinge, die "bekannte Typen" haben, früher als Dinge, die "unbekannte Typen" haben. Insbesondere können Sie möglicherweise Rohre neu anordnen und ähnliche verkettete Funktionen, so dass die getippten Objekte an erster Stelle stehen.
- Kommentieren Sie nach Bedarf. Ein üblicher Trick besteht darin, Anmerkungen hinzuzufügen, bis alles funktioniert, und sie dann nacheinander zu entfernen, bis Sie es haben das Minimum benötigt. Vermeiden Sie, wenn möglich, Anmerkungen zu machen. Nicht nur ist es nicht ästhetisch, aber es macht den Code spröder. Es ist viel einfacher, Typen zu ändern, wenn es keine expliziten gibt Abhängigkeiten von ihnen.
Tags und Links f# type-inference