I x stattWarum haben diese Argumente einen Einheitentyp ergeben?
let myMax x y =
if x > y then x else y
x
Ich hatte erwartet, dass x und y Argumente sind immer noch von ‚einer Art, aber ich habe diese Signatur an das Ende dieser Funktion absichtlich hinzugefügt:
myMax : x:unit -> y:unit -> unit
Warum diese Argumente, die auf einen Einheitentyp zurückgeführt werden?
Bearbeiten: Vielen Dank @gilles für die Antwort. Beachten Sie diese zwei Funktionen:
let foo x y =
0 // warning
x
val foo : x:'a -> y:'b -> 'a
let foo2 x y =
if x > y then x else y // no warning
x
val foo2 : x:unit -> y:unit -> unit
Was unterscheidet die beiden Signaturen? scheint in der zweiten Funktion wie der Compiler das Ergebnis des Vergleich -entweder x interpretieren oder y- als Einheit
würde ich auch hinzufügen, dass, wenn Sie sich unter Verwendung finden 'ignore', die Chancen sind, sind Sie etwas falsch machen . Dieses spezielle Beispiel ist auch keine Ausnahme: Der 'if-then'-Ausdruck macht keinen Sinn, weil sein Rückgabewert weggeworfen wird und keine Nebeneffekte erzeugt. –