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!"
| _ -> ()