Compartilhar via


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.

[<Struct>]
type S =
   member this.Valid = true
let check () =
    let mutable s = S()
    <@ s.Valid @> // Error

Para contornar esse requisito, crie uma cópia da variável local, como mostra o exemplo a seguir:

let check () =
    let s = S()
    <@ 
        let s = s
        s.Valid 
    @>

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.

let a : int ref = Unchecked.defaultof<_>
let main() =
    printfn "%A" (a = a)
main()

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:

(* """ *)
Let x = 1

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.