me temo que no hay azúcar sintáctica para los tipos anulables en F # (a diferencia de C# en el que simplemente añadir una ?
con el tipo). Así que sí, el código que muestra parece terriblemente detallado, pero es la única forma de usar el tipo System.Nullable<T>
en F #.
Sin embargo, sospecho que lo que realmente quiere utilizar es option types. Hay algunos ejemplos decentes en la página de MSDN:
let keepIfPositive (a : int) = if a > 0 then Some(a) else None
y
open System.IO
let openFile filename =
try
let file = File.Open (filename, FileMode.Create)
Some(file)
with
| exc -> eprintf "An exception occurred with message %s" exc.Message; None
Claramente mucho más agradable de usar!
Las opciones cumplen esencialmente el rol de los tipos que aceptan nulos en F #, y creo que realmente quieres usarlos en lugar de los tipos que aceptan nulos (a menos que estés haciendo interoperabilidad con C#). La diferencia en la implementación es que los tipos de opciones están formados por una unión discriminada de Some(x)
y None
, mientras que Nullable<T>
es una clase normal en el BCL, con un poco de azúcar sintáctica en C#.
Bien, entonces, ¿cómo convertir un escalar como 100 en una "opción int"? –
El primer ejemplo en mi publicación muestra eso. Para el ejemplo que dio, es simplemente 'Some (100)' – Noldorin
. Ahora hay mucho soporte sintáctico. Ver por ejemplo [todos los operadores que pueden tomar una nullable] (https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/symbol-and-operator-reference/nullable-operators), también como funciones como 'Option.ofNullable',' Option.toNullable' y muchos otros. – Abel