2010-01-18 16 views
5

on line 5633 in prim-types.fs (v1.9.7.8) v'è il seguente tipo sigla:Domande sulla definizione di pigro

type 'T ``lazy`` = Lazy<'T> 

Ho un paio di domande su di esso.

  1. Che cosa significano i doppi apici inversi?
  2. Questa definizione equivale a type lazy<'T> = Lazy<'T>? (In caso contrario, in che modo è diverso?)

risposta

8

I doppi torni indietro sono un modo per consentire l'utilizzo di una parola chiave F # come identificativo. Un altro esempio potrebbe essere

let ``let`` = 42 
+0

Infatti consente di utilizzare qualsiasi stringa come un identificatore, quindi sei appassionato di identificatori con punti interrogativi (ALA Ruby) si può dire:? \t let '' è buono '' = false Benchè Non sono convinto che questo sia davvero un buon modo per scrivere codice. – Robert

5

Per rispondere alla seconda metà della tua domanda, i tipi generici in F # possono essere specificate utilizzando la sintassi in stile O'Caml dove il parametro generico precede il tipo (ad es 'a list, int array, ecc .), o lo stile .NET con parentesi angolari (es. list<'a>, array<int>, ecc.), quindi le due definizioni sono in effetti sostanzialmente equivalenti (eccetto che la tua versione scritta non è sintatticamente valida perché lazy è una parola chiave). Per i tipi generici multiparametro, lo stile O'Caml è deprecato e genera un avviso (ad esempio, let (m:(int,string) Map) = Map.empty deve essere riscritto come let (m:Map<int,string>) = Map.empty).

+1

... oppure: 'let m = Map.empty ' che è un po 'più bello secondo me. –

Problemi correlati