Dieser Code lässt sich sowohl in F # als auch in OCaml gut kompilieren:
%Vor% Ich habe sowohl in FSI als auch in Utopie getestet. Es gibt immer true
zurück.
Das jqk3jtl23jtlk123
ist völlig zufällig und sein Typ wird als 'a
abgeleitet. Selbst wenn ich k
auf einen Datentyp (z. B. let testmatch (k: int) =
) beschränke, kompiliert es (obwohl es offensichtlich den testmatch
-Typ auf int -> bool
anstatt auf 'a -> bool
beschränkt.
Könnte jemand bitte erklären, was vor sich geht? Speziell:
jqk3jtl23jtlk123
? In diesem Fall ist das "Literal" jqk3jtl23jtlk123
ein gültiger Variablenname, und das, was das Muster links von ->
beschreibt, ist dasselbe, als hätten Sie let jqk3jtl23jtlk123 = k
geschrieben. Da dies einen beliebigen Wert von k
akzeptiert und seinen Typ nicht einschränkt, weil die Bindung für alle Typen funktioniert, ist der abgeleitete Typ 'a
, der allgemeinste Wert, den das Typsystem darstellen kann.
Wenn Sie das Literal zu etwas machen, das kein gültiger Bezeichner ist, zum Beispiel mit einer Ziffer, wird es nicht kompiliert.
Wenn Sie das Literal in Anführungszeichen setzen, wird es als String-Wert-Literal interpretiert. Sie sollten die nicht erschöpfende Übereinstimmungswarnung erhalten und den k
-Typ auf string
beschränken.
Dies ist ein Wildcard-Muster, das angibt, was k
gleich ist. Dies entspricht
Tags und Links f# pattern-matching ocaml