F # unterstützt keine impliziten Konvertierungen. Ich verstehe, dass dies ein Feature ist, aber ich verstehe nicht, warum implizite Konvertierungen verboten sind, selbst wenn keine Informationen verloren gehen. Zum Beispiel:
%Vor% Ich sehe kein Problem darin, das int
4 implizit in ein float
zu konvertieren, was sqrt
erfordert.
Kann irgendjemand etwas dazu sagen?
Weil sein Typ-Checker fast von der klassischen starken Typ-Rekonstruktion abhängt. Ihr Beispiel erfordert den Zwang von Typen, der durch implizite Umwandlungen oder ein schwaches System möglich ist, aber diese sind bei dieser Art von Typinferenz nicht erlaubt.
Da F # von OCaml kommt, hat es eine Typrekonstruktion, die versucht, die Korrektheit Ihres Programms zu garantieren, indem es extrem pedantisch ist: Der Algorithmus versucht, alle Typen Ihres Programms zu einer guten Typisierung zu vereinheitlichen kann nicht gemacht werden, wenn eine schwache Typregel es erlaubt, eine ganze Zahl wie einen Gleitkommawert zu betrachten.
Zusätzlich zu den obigen Antworten geben Sie Konvertierungen zwischen Ganzzahl und Float ein nicht wirklich kostenlos in computergestützten Begriffen; Der Compiler ist nicht , der Ihnen einen Gefallen tut, indem er sie "versteckt", wenn Sie Hochleistungscode schreiben wollen. Das ist eines der Dinge, die ich an OCaml und F # mag: Selbst wenn sie sehr hoch sind, müssen Sie immer genau wissen, welche Berechnungen Sie gerade machen.
Tags und Links f#