2010-05-16 13 views

Respuesta

27

En F # (y OCaml) let es una construcción bastante poderosa que se utiliza para el enlace de valores , lo que significa asignar algún significado a un símbolo. Esto puede significar varias cosas:

Declarando el valor local o global - puede usarlo para declarar valores locales. Esto es similar a la creación de una variable en los lenguajes imperativos, con la excepción de que el valor de la variable no se puede cambiar más tarde (es inmutable):

let hello = "Hello world" 
printfn "%s" hello 

función Declarar - también se puede usar para declarar funciones . En este caso se especifica que un símbolo es una función con un poco de aridad:

let add a b = a + b 
printfn "22 + 20 = %d" (add 22 20) 

¿Por qué lo necesita? En F #, el código sería ambiguo sin él. Puede utilizar valor ocultar para crear nuevo símbolo que oculta el símbolo anterior (con el mismo nombre), por lo que por ejemplo los siguientes rendimientos: true

let test() = 
    let x = 10 
    let x = 20 // hides previous 'x' 
    x = 20  // compares 'x' with 20 and returns result 

Si se omitiera la palabra clave let, que no sabrían si está comparando valores o si está declarando un nuevo símbolo.Además, como han dicho otros, puede utilizar la sintaxis let <symbol> = <expression> in <expression> (si se utiliza la línea de rotura en F #, entonces no es necesario in) para escribir fijaciones de valor como parte de otra expresión:

let z = (let x = 3 + 3 in x * x) 

Aquí, el valor de z será 36. Aunque es posible que pueda inventar alguna sintaxis que no requiera la palabra clave let, creo que usar let simplemente hace que el código sea más legible.

+2

Parece que 'let' se introduce solo porque' x = y' es ambiguo? Si '==' se usa para comparar, ¿el 'let' se vuelve innecesario? – kennytm

+1

@KennyTM: En principio, definitivamente podrías inventar alguna sintaxis no ambigua, pero creo que 'let' es bastante legible. Además, en la sintaxis completa, el 'let' se combina con' in' (porque es una expresión, no hay enunciados en F #), por lo que necesitaría algo similar. –

+1

Me estremezco cuando veo 'let' w/out' in' en F # ... Como programador de ocaml veo que el' en' es de gran ayuda en la legibilidad y el formateo. ¿Por qué los programadores F # no lo utilizan tanto? – nlucaroni

1

let significa "vincular valor al nombre" y generalmente se habla, crea una nueva variable. x = 4 significa "asignar 4 a x", que no crea un nombre nuevo.

Ver http://msdn.microsoft.com/en-us/library/dd233238.aspx

+0

Puede ser tradicional de Lisp, donde no usan la sintaxis '=' e infix en general. –

+1

En realidad, tanto en F # como en ocaml 'x = 4' es una operación booleana que devuelve verdadero iff x es igual a 4. No es una asignación. – sepp2k

9

El objetivo principal de "let" se colocar un instrumento en torno a sus definiciones.

let <definitions> in <expression>

se asegura de que las definiciones no contaminan el espacio de nombres que no sea <expression> nada.

4

"let" introduce un nuevo ámbito variable, y le permite vincular variables a valores para ese ámbito. A menudo se lee como "dejar x ser [valor] en ...". Cuando no tiene una asignación, es muy útil para evitar nombres de variables conflictivos.

3

En Haskell,

foo = let x = 5 
     y = 7 
     in z=x+y 

se utiliza para dejar claro que X e Y son variables "privados" a foo.

+0

Pero en F # necesita escribir 'let foo = ...' incluso para variables no locales. – kennytm

1

Si le gusta aprender, this lecture podría ser relevante también, esp. la parte sobre la evaluación del término let.

Cuestiones relacionadas