2009-02-13 16 views
33

Sto appena iniziando a imparare F #. In diversi F codifica # esempi che vedo la parola chiave "in" utilizzato nel modo seguente:Significato della parola chiave "in" in F #

let doStuff x = 
    let first, second = x in 
    first + " " + second 

La funzione lavora con e senza la "in" a poi fine della seconda linea. Cosa fa "in"?

risposta

30

in è una sbornia da s 'F # radici OCaml e specifica legati variabili, che sono leggermente diverse da variabili scopi.

Si pensi al legame variabile come segue; Hai un'espressione:

first + " " + second 

Allo stato attuale first e second sono non legato - non hanno alcun valore fisso - in modo che l'espressione non ha alcun valore concreto al momento. Utilizzando la sintassi

let (...) in 

si specifica come tali variabili sono vincolati in quell'espressione, così il vostro esempio useranno la sostituzione di variabile per ridurre tale funzione fino al

let doStuff x = 
    x + " " + x 

In questo esempio entrambe le forme sono identiche, ma immagina quanto segue:

let (x = 2 and y = x + 2) in 
    y + x 

questo non funzionerà lo stesso

let (x = 2 and y = x + 2) 
    y + x 

Perché nel primo caso x è destinato solo dopo la parola chiave in.

Nel caso successivo, la variabile normale scopeing ha effetto, quindi le variabili vengono associate non appena vengono dichiarate.

Spero che chiarisca le cose. In generale, si dovrebbe sempre utilizzare la versione senzain e specificare #light all'inizio del tuo F # source file

+2

Non credo che il codice in questione è equivalente a 'far doStuff x = x +" "+ x'. Credo che sia equivalente a 'let doStuff x = (fst x) +" "+ (snd x)'. Ho sbagliato qui? – Soldalma

5

Per citare here.

Se l'opzione di sintonizzazione della luce è attivata, "in" è facoltativa. Il token dopo il '=' di una definizione 'let' inizia un nuovo blocco, dove il pre-parser inserisce un token implicito che separa 'in' token che inizia a la stessa colonna di quel token .

Senza l'opzione di sintassi della luce 'in' è richiesto molto spesso. "In" è opzionale quando viene utilizzata l'opzione syntac light .

Quindi suppongo che tu stia usando la sintassi leggera.

+0

Sì, sto usando la luce. –