Warum gibt es keine impliziten Konvertierungen in F #?

8

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?

    
royco 06.11.2010, 02:45
quelle

3 Antworten

13

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.

    
Jack 06.11.2010, 02:57
quelle
7

Siehe auch

Ссылка

beschreibt, wie Überladung schlecht mit Typinferenz interagiert. Implizite Konvertierungen verursachen viele der gleichen Probleme wie Überladen und interagieren auch schlecht mit der Fehlerdiagnose.

    
Brian 06.11.2010 07:59
quelle
5

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.

    
Gaius 06.11.2010 08:59
quelle

Tags und Links