son - F#cómo escribir una declaración vacía
xml es sensible a mayusculas y minusculas (2)
¿Cómo puedo escribir una declaración de no-op en F #?
Específicamente, ¿cómo puedo mejorar la segunda cláusula de la siguiente declaración de coincidencia:
match list with
| [] -> printfn "Empty!"
| _ -> ignore 0
La respuesta de Stringer es, por supuesto, correcta. Pensé que podría ser útil aclarar cómo funciona esto, porque "()" no es realmente una declaración vacía o un efecto secundario vacío ...
En F #, cada pieza de código válida es una expresión . Las construcciones como let
y match
consisten en algunas palabras clave, patrones y varias subexpresiones. La gramática F # para let
y match
ve así:
<expr> ::= let <pattern> = <expr>
<expr>
::= match <expr> with
| <pat> -> <expr>
Esto significa que el cuerpo de let
o el cuerpo de cláusula de match
debe ser una expresión. Puede ser alguna llamada de función como ignore 0
o puede ser algún valor; en su caso, debe ser una expresión del tipo de unit
, porque printfn ".."
también es de tipo unit
.
El tipo de unit
es un tipo que tiene un solo 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 valor.
Por cierto: el siguiente código puede parecer una secuencia de sentencias, pero también es una expresión:
printf "Hello "
printf "world"
El compilador de F # agrega implícitamente ;
entre las dos lineas y ;
es un operador de secuenciación, que tiene la siguiente estructura: <expr>; <expr>
<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 viene con un fondo de C #, pero hace que el lenguaje sea sorprendentemente elegante y elegante. No te limita de ninguna manera; por ejemplo, puedes escribir:
if (a < 10 && (printfn "demo"; true)) then // ...
(Este ejemplo no es realmente útil, solo una demostración de la flexibilidad)
Utilice la unidad para el efecto secundario vacío:
match list with
| [] -> printfn "Empty!"
| _ -> ()