Alterações significativas no F# 3.0
Este tópico descreve alterações significativas na versão 3.0 do compilador de F# e na linguagem para a versão de Visual Studio 2012 .
Lista de Alterações Significativas
A tabela a seguir lista alterações significativas em F# 3.0.
A área de alteração significativa |
Descrição |
---|---|
Recuo |
Alguns recuos incorretos que tenham sido aceitos erroneamente por versões anteriores do compilador de F# geram um erro de compilação na versão atual.Para obter uma descrição completa das regras derecuo, consulte Diretrizes de formatação (F#) de código.. |
Aspas, métodos, e propriedades de estruturas que são variáveis locais |
Agora é um erro chamar uma propriedade ou método de uma estrutura em uma aspas quando essa estrutura for uma variável local.As versões anteriores de F# permitiam esse comportamento.
Para contornar esse requisito, crie uma cópia da variável local, como mostra o exemplo a seguir:
|
Igualdade para nulos inadequados |
Em versões anteriores, você podia comparar valores nulos usando operador = independentemente deles serem valores apropriados ou inadequados de um tipo.Um nulo apropriado é um valor nulo que o tipo permite; um nulo inadequado não é um valor válido para o tipo.O comportamento atual é gerar uma NullReferenceException quando você tentar usar o operador = para comparar nulos inadequados, conforme o código a seguir mostra.
|
Comentários e cadeias de caracteres |
Em versões anteriores, um token de fechamento de comentário *) em uma cadeia de caracteres entre aspas triplas (uma cadeia de caracteres que utiliza """) era analisado como uma parte de uma cadeia de caracteres.Na versão atual, esse token é analisado como um caractere de fechamento de comentário.Como consequência, o código a seguir, que foi anteriormente aceito, irá gerar um erro na versão atual:
Para obter mais informações, consulte Seqüências de caracteres (F#). |
Propriedades que têm tipos diferentes do getter e setter. |
Em versões anteriores de F#, o compilador de F# permitia incorretamente que os métodos getter e setter tivessem tipos que não correspondessem (por exemplo, um getter do tipo int e um setter do tipo cadeia de caracteres).No F# 3.0, o compilador relata tal declaração como um erro. |