Como faço para criar um tipo de opção mutável F#?
Pergunta
Eu preciso criar um mutável option<T>
Digite F#. Eu tentei escrever
let x = ref None
e posteriormente escrevendo
x := Some(z)
Mas não funciona. Ajuda!
Solução
Você precisa declarar o tipo explicitamente para evitar "A restrição de valor" (ou veja "Generalização automática" no MSDN):
let x : Ref<int option> = ref None
x := Some 4
Outras dicas
Observe também que você enfrenta esse problema apenas ao inserir o código em F# interacativo linha por linha. Se você inserir a primeira linha sem fornecer anotações de tipo, receberá o erro:
> let x = ref None;;
// Tests.fsx(1,7): error FS0030: Value restriction.
No entanto, se você entrar em uma porção maior de código que usa o x
A célula ref (por exemplo, atribui um valor a ele) e f# poderá inferir o tipo da parte posterior do código, para que você não precisará de qualquer anotações de tipo. Por exemplo:
> let x = ref None
x := Some(10);;
Isso funcionará bem, porque F# inferirá o tipo de x
da segunda linha. Isso significa que você provavelmente não deve precisar de nenhuma anotação de tipo se enviar o código para f# interativamente para testar em partes maiores (e em um código F# compilado, quase nunca enfrentará esse problema).