Je dois créer un type mutable option<T>
dans F #. J'ai essayé d'écrireComment créer un type d'option modifiable F #?
let x = ref None
et écrire ensuite
x := Some(z)
mais il ne fonctionne pas. Aidez-moi!
Je dois créer un type mutable option<T>
dans F #. J'ai essayé d'écrireComment créer un type d'option modifiable F #?
let x = ref None
et écrire ensuite
x := Some(z)
mais il ne fonctionne pas. Aidez-moi!
Vous devez indiquer le type explicitement pour éviter "the Value Restriction" (ou voir "Automatic Generalization" on msdn):
let x : Ref<int option> = ref None
x := Some 4
Notez également que vous faites face à ce problème que lorsque vous entrez le code F # ligne par ligne interacative. Si vous entrez dans la première ligne sans fournir des annotations de type, vous obtiendrez l'erreur:
> let x = ref None;;
// Tests.fsx(1,7): error FS0030: Value restriction.
Cependant, si vous entrez un porition plus grand de code qui utilise la cellule ref x
(par exemple attribue une valeur à elle) alors F # sera capable de déduire le type de la dernière partie du code, donc vous n'aurez besoin d'aucune annotation de type. Par exemple:
> let x = ref None
x := Some(10);;
Cela fonctionne bien, parce que F # va déduire le type de x
de la deuxième ligne. Cela signifie que vous ne devriez probablement pas avoir besoin d'annotations de type si vous envoyez le code à F # de manière interactive pour le tester en plus grandes parties (et dans un code F # compilé, vous ne rencontrerez presque jamais ce problème).
Je me demandais juste, mais pourquoi auriez-vous besoin d'une option mutable? – Juliet