2011-05-10 3 views
2

Je n'ai pas travaillé avec PMG en temps et je suis tombé sur cette ligne de code:Déclaration de type déroutant?

type memory = string -> int; 

Est-ce définir la « mémoire » pour être une fonction qui prend une chaîne retourne un int, ou tout autre chose ? J'ai cherché une déclaration similaire mais je n'arrive pas à en trouver une ou à comprendre ce qu'elle fait.

Quand je mets dans SML/NJ, je reçois ceci:

- type memory = string -> int; 
type memory = string -> int 

Répondre

8

memory n'est pas une fonction, il est juste une abréviation pour un type qui est une fonction qui prend en entrée une chaîne et retourne un int. Donc, chaque fois que vous voulez écrire que quelque chose est de type string->int vous pouvez simplement écrire c'est de type memory.

Par exemple au lieu d'écrire:

- fun foo(f : string->int, s) = f s; 
val foo = fn : (string -> int) * string -> int 

vous pouvez écrire:

- fun foo(f: memory, s) = f s; 
val foo = fn : memory * string -> int 

Ces type déclarations peuvent rendre votre code plus lisible (par exemple, au lieu d'écrire qu'une paire x est de type int*int comme (x: int*int), vous pouvez simplement créer une abréviation type pair = int*int et alors vous pouvez écrire que x est de type pair comme t son (x: pair)).