¿Cómo creo un tipo de opción F# mutable?
Pregunta
Necesito crear un mutable option<T>
Escriba f#. He intentado escribir
let x = ref None
y posteriormente escribiendo
x := Some(z)
Pero no funciona. ¡Ayuda!
Solución
Debe indicar el tipo explícitamente para evitar "La restricción del valor" (o ver "Generalización automática" en MSDN):
let x : Ref<int option> = ref None
x := Some 4
Otros consejos
También tenga en cuenta que se enfrenta a este problema solo al ingresar el código en F# Interacativo Línea por línea. Si ingresa la primera línea sin proporcionar anotaciones de tipo, obtendrá el error:
> let x = ref None;;
// Tests.fsx(1,7): error FS0030: Value restriction.
Sin embargo, si ingresa una porción de código más grande que usa el x
REF Cell (por ejemplo, le asigna un valor), entonces F# podrá inferir el tipo de la parte posterior del código, por lo que no necesitará ninguna anotación de tipo. Por ejemplo:
> let x = ref None
x := Some(10);;
Esto funcionará bien, porque f# inferirá el tipo de x
Desde la segunda línea. Esto significa que probablemente no debería necesitar ninguna anotación de tipo si envía el código a F# de manera interactiva para probar en porciones más grandes (y en un código F# compilado, casi nunca enfrentará este problema).