2010-04-24 24 views

Respuesta

27

Uso unidad de vacío efecto secundario:

match list with 
    | [] -> printfn "Empty!" 
    | _ ->() 
+2

Donde "()" es el valor de tipo "unidad", y "unidad" es el tipo de retorno de "printfn", algo parecido a "vacío". – Brian

+0

Perfecto, gracias! –

+0

¿Puedo usarlo para el ciclo Empty While? – fahadash

14

La respuesta de Stringer, es, por supuesto correcto Pensé que podría ser útil aclarar cómo funciona esto, porque "()" en realidad no es una declaración vacía o un efecto secundario vacío ...

En F #, cada código válido es una expresión. Las construcciones como let y match consisten en algunas palabras clave, patrones y varias subexpresiones. El F # gramática para let y match se ve así:

<expr> ::= let <pattern> = <expr> 
      <expr> 
     ::= match <expr> with 
      | <pat> -> <expr> 

Esto significa que el cuerpo de let o el cuerpo de la cláusula de match debe haber alguna expresión. Puede ser una llamada a función como ignore 0 o puede tener algún valor. En su caso, debe ser una expresión del tipo unit, porque printfn ".." también es del tipo unit.

El tipo unit es un tipo que tiene solo un valor, que se escribe como () (y también significa tupla vacía sin elementos). Esto es, de hecho, algo similar a void en C# con la excepción de que void no tiene ningún valores.

Por cierto: El siguiente código puede parecerse a una secuencia de sentencias, pero también es una expresión:

printf "Hello " 
printf "world" 

El F # compilador añade implícitamente ; entre las dos líneas y ; es un operador de secuenciación, que tiene la siguiente estructura: <expr>; <expr>. Requiere que la primera expresión devuelva unit y devuelva el resultado de la segunda expresión.

Esto es un poco sorprendente cuando vienes del fondo C#, pero hace que el lenguaje sea sorprendentemente elegante y conciso. Que no lo limita de ninguna manera - puede por ejemplo escribir:

if (a < 10 && (printfn "demo"; true)) then // ... 

(Este ejemplo no es realmente útil - sólo una demostración de la flexibilidad)

Cuestiones relacionadas