Domanda

Sto imparando F #. Ho iniziato cercando il F # campioni da Microsoft.

Mi sono imbattuto in questa dichiarazione:

let line1,line2 = 
    use sr = System.IO.File.OpenText @"test.txt"
    let line1 = sr.ReadLine() 
    let line2 = sr.ReadLine() 
    (line1,line2)

Qualcuno può spiegare questa affermazione a me?

Che tipo viene definito qui? Una funzione? Una tupla?

Perché line1 e line2 devono essere ridefiniti nella definizione di line1,line2 (let line1 = ... let line2 =)?

Che cosa è con la linea finale, (line1, line2) e come funziona questo legame nel tipo di definizione originale? E 'questo il ritorno della funzione?

E 'anche la parola giusta "dichiarazione", per usare una definizione in F #?

Grazie.

È stato utile?

Soluzione

La forma generale per i valori di identificatore vincolante in F # è

let pattern = expression

In questo caso, il modello è "linea 1, linea 2", che è un tuple modello, che si aspettano di legarsi ad un 2-tupla di valori e assegnare i nomi "line1" e "LINE2" a questi due valori.

espressione è il prossimo 4 linee. All'interno di quella espressione ci sono variabili locali. Essi capita di essere anche denominata "linea 1" e "Linea 2", ma avrebbero potuto facilmente sono stati rinominati "x" e "y" o qualsiasi altra cosa - la portata di tali identificatori è locale a questa espressione frastagliata. (Il fatto che gli stessi nomi sono usati come i nomi del perimetro esterno ha alcun effetto per quanto riguarda il compilatore è interessato.)

La riga finale se l'espressione è il 'valore di ritorno' dell'espressione. In questo caso restituisce il 2-upla di valori "linea 1" e "riga2" (o "x" e "y" se li rinomina per chiarezza di esposizione). Incidentalmente, poiché questi due valori hanno ciascuno tipo "stringa", il tipo dell'espressione ritorno è "stringa * stringa", che è un 2-tuple dove ogni valore è una stringa. Questo significa che le "linea 1" originali "e line2" nomi sulla prima riga sarà ogni essere dedotto di avere tipo "string".

F # è funzionale, e quindi in un certo senso "tutto è espressione" e "non ci sono dichiarazioni" (solo sequenze di espressioni che sono in sequenza valutati), ma è ok IMO a (ab) usa il termine "dichiarazione "per descrivere l'interno 'let' linee, a meno che non si sta cercando di essere molto precisi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top