Freigeben über


Wichtige Änderungen in F# 3.0

In diesem Thema werden wichtige Änderungen in der Version 3.0 des F#-Compilers und in der Sprache für die Version Visual Studio 2012 beschrieben

Liste wichtiger Änderungen

In der folgenden Tabelle werden wichtige Änderungen in F# 3.0 aufgeführt.

Bereich der wichtigen Änderung

Beschreibung

Indentation

Falsche Einzüge, die in früheren Versionen des F#-Compilers fälschlicherweise akzeptiert wurden, erzeugen in der aktuellen Version einen Kompilierungsfehler.Eine ausführliche Beschreibung der Einzugsregeln finden Sie unter Richtlinien für das Formatieren von Code (F#).

Quotationen, Methoden und Eigenschaften von Strukturen, die lokale Variablen sind

Es ist jetzt ein Fehler, eine Eigenschaft oder Methode einer in Quotationszeichen eingeschlossenen Struktur aufzurufen, wenn diese Struktur eine lokale Variable ist.In früheren Versionen von F# war dieses Verhalten zulässig.

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

Um dieser Anforderung zu genügen, erstellen Sie eine Kopie der lokalen Variablen, wie im folgenden Beispiel gezeigt:

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

Gleichheitsoperator für unzulässige NULL-Werte

In früheren Versionen konnten NULL-Werte mit dem Operator = verglichen werden, unabhängig davon, ob sie zulässige oder unzulässige Werte eines Typs waren.Ein zulässiger NULL-Wert ist ein gültiger Wert für den Typ, ein unzulässiger NULL-Wert ist ein ungültiger Wert für den Typ.Jetzt wird beim Vergleichen von unzulässigen NULL-Werten mit dem Operator = eine NullReferenceException ausgelöst, wie der folgende Code zeigt:

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

Kommentare und Zeichenfolgen

In früheren Versionen wurde ein schließendes Kommentartoken *) in einer Zeichenfolge in dreifachen Anführungszeichen (""") als Teil der Zeichenfolge analysiert.In der aktuellen Version wird dieses Token als schließende Kommentarzeichen analysiert.Daher generiert der folgende Code, der zuvor akzeptiert wurde, einen Fehler in der aktuellen Version:

(* """ *)
Let x = 1

Weitere Informationen finden Sie unter Zeichenfolgen (F#).

Eigenschaften mit unterschiedlichen Getter- und Setter-Typen.

In früheren Versionen von F# erlaubte der F#-Compiler fälschlicherweise Getter- und Setter-Methode mit unterschiedlichen Typen (beispielsweise einen Getter des Typs Ganzzahl und einen Setter des Typs Zeichenfolge).In F# 3.0 gibt der Compiler bei solchen Deklaration eine Fehlermeldung aus.