Partager via


Modifications avec rupture dans F# 3.0

Cette rubrique décrit les modifications dans la version 3,0 du compilateur F# et du langage pour la version release Visual Studio 2012 .

Liste de modifications

Le tableau suivant répertorie les nouveautés F# 3,0.

Zone de modification importante

Description

Mise en retrait

Des mises en retrait non valide qui étaient à tort acceptées par les versions antérieures du compilateur F# génère une erreur de compilation dans la version actuelle.Pour une description complète des règles de mise en retrait, consultez Indications pour la mise en forme du code (F#).

Quotations, méthodes, propriétés des structures qui sont des variables locales

C´est désormais une erreur d´appeler une propriété ou une méthode de la structure dans une quotation lorsque cette structure est une variable locale.Les versions antérieures F# permettaient ce comportement.

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

Pour contourner cette spécification, créez une copie de la variable locale, comme le montre l'exemple suivant :

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

Equit'e pour les valeurs nulls inexact

Dans les versions antérieures, vous pouvez comparer les valeurs NULL à l'aide de l'opérateur = qu´elles soient des valeurs appropriées ou inappropriées d'un type.une Null approprié est une valeur NULL que le type permet ; un null inexact n'est pas une valeur valide pour le type.Le comportement actuel est de lever une NullReferenceException lorsque vous essayez d'utiliser l'opérateur = pour comparer des NULLS invalides, comme l'illustre le code suivant.

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

Les commentaires et les chaînes

Dans les versions antérieures, un jeton de commentaire fermant *) dans une chaîne triple entre guillemets (une chaîne qui utilise le """) a été analysé comme une partie d'une chaîne.Dans la version actuelle, ce jeton est analysée en tant que caractère fermeture de commentaire.Par conséquent, le code suivant, qui précédemment a été reçu, génère une erreur dans la version actuelle :

(* """ *)
Let x = 1

Pour plus d'informations, consultez Chaînes (F#).

Les propriétés qui ont différents types d'accesseurs Get et d'accesseur Set.

Dans les versions antérieures de F#, le compilateur F# autorisait de manière incorrecte l'accesseur Get et l'accesseur Set à avoir des types différents (par exemple, un accesseur Get de type int et un accesseur Set de type chaîne).Dans F# 3,0, le compilateur signale une telle déclaration comme une erreur.