Semantik der F#-Anweisung
Frage
Kann mir jemand diesen F#-Ausdruck beschreiben?
val augment: GameGrid -> points -> unit
Was bedeutet das val
Schlüsselwort bedeuten?
Stimmt das normalerweise? type -> type
Gibt eine Funktion an, die den angegebenen Typ zurückgibt?Das gilt auch type -> type -> type
eine Funktion angeben, die eine Funktion zurückgibt, die den angegebenen Typ zurückgibt?
Lösung
(Das 'val'-Bit ist kein Ausdruck;Nebenbei denke ich, dass es in drei verschiedenen Kontexten erscheinen kann:
- Die Ausgabe von FSI (F# Interactive REPL), die den abgeleiteten Typ einer Bindung beschreibt
- in einer Signaturdatei (.fsi), die den Typ eines let-gebundenen Modulwerts beschreibt
- in einer Struktur-/Klassendefinition ('explizite' Syntax), um eine Instanzvariable zu definieren
und keines davon sind technisch gesehen Ausdruckskontexte.)
Was den Typ betrifft, in der Tat
A1 -> A2 -> R
bedeutet eine Funktion, die ein A1 annimmt und eine Funktion zurückgibt, die ein A2 annimmt und ein R zurückgibt.Die Argumente sind scharfsinnig, und es kann Ihnen gut tun, z. B. zu lesen:
F#-Funktionstypen:Spaß mit Tupeln und Curry
in dem Currying und Teilanwendung ausführlicher beschrieben werden.
Andere Tipps
Wie hast du diese Ausgabe? In FSI?
Val indiciates nur eine Definition eines Wertes.
z. wenn Sie schrieb in C #
private void Foo(int i);
Sie schreiben würden dies in F #
val Foo : int -> unit
In Bezug auf type -> type -> type
: Dies ist eine Funktion mit zwei Parametern (Typ) Rückkehr `Typ'
z.
let plus a b = a + b
hat bekam Unterschrift int -> int -> int
.
Ihre Idee mit einer Funktion, die eine Funktion zurückgibt, ist tatsächlich richtig. Dies ist eine sehr interessante Technik in vielen funktionalen Sprachen genannt currying