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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top