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!

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top