2009-05-13 17 views
1

Kann mir jemand diesen F # -Ausdruck beschreiben?Semantik von F # -Anweisung

val augment: GameGrid -> points -> unit 

Was bedeutet das Schlüsselwort val?

Stimmt es, dass normalerweise type -> type eine Funktion angibt, die den angegebenen Typ zurückgibt? Gibt type -> type -> type eine Funktion an, die eine Funktion zurückgibt, die den angegebenen Typ zurückgibt?

Antwort

4

(die ‚val‘ Bit ist kein Ausdruck, offhand ich denke, es in drei verschiedenen Kontexten auftreten können:

  • die Ausgabe des FSI (F # interaktive REPL), beschreibt die abgeleiteten Typ eines Bindungs ​​
  • in eine Signatur (.fsi) Datei, den Typ eines let-bound Modulwert
  • in einer struct/Klassendefinition ('Explicit' Syntax) beschreibt, eine Instanzvariable

und keiner definieren O f diejenigen sind technisch Ausdruck Kontexten.)

Wie für die Art, in der Tat

A1 -> A2 -> R 

bedeutet eine Funktion, die ein A1 nimmt und gibt eine Funktion, die ein A2 und gibt eine R. Die Argumente sind curried und es kann dir gut tun, zB zu lesen

F# function types: fun with tuples and currying

der detaillierten currying und Teilanmeldung beschreibt.

+0

Dies kam aus einer FSI-Datei. –

3

Wie haben Sie diese Ausgabe erhalten? In FSI?

Val zeigt nur eine Definition eines Wertes an.

z. wenn Sie die folgenden in C#

private void Foo(int i); 

schrieb würde schreiben Sie dies in F #

val Foo : int -> unit 

Bezüglich type -> type -> type: Dies ist eine Funktion mit zwei Parametern (Typ) Rückkehr `Typ'

Z.B.

let plus a b = a + b 

hat 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 currying

+0

Ja, es kam aus einer FSI-Datei. –