Aracılığıyla paylaş


F# 3.0 değişiklikleri kesiliyor

Bu konu Visual Studio 2012 yayını için F# derleyicisinin ve dilinin 3.30 sürümü içindeki bozucu değişiklikleri açıklar.

Bozucu Değişiklikler Listesi

Aşağıdaki tablo F# 3.0 içindeki bozucu değişiklikleri listeler.

Bozucu değişiklik alanı

Tanımlama

Girinti

F# derleyicisinin önceki sürümlerinde hatalı olarak kabul edilen bazı yanlış girintiler geçerli sürümde derleme hatası üretir. Girinti kurallarının tam bir açıklaması için, bkz: Kod biçimlendirme yönergeleri (F#).

Yerel değişken olan yapıların alıntıları, yöntemleri ve özellikleri

Yerel bir değişken olan bir yapının bir özelliğini ya da yöntemini bir alıntı içinde çağırmak artık bir hatadır. F#'in önceki sürümleri bu davranışa izin verir.

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

Bu gereksinimin etrafından dolaşmak için, yerel değişkenin bir kopyasını oluşturun, aşağıdaki örneğin gösterdiği gibi:

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

Uygunsuz nulller için eşitlik

Önceki sürümlerde, null değerlerine bir türün uygun ya da uygunsuz değerleri olup olmadıklarına bakmaksızın = işlecini kullanarak karşılaştırabilirsiniz. Bir uygun null türün izin verdiği bir null değeridir; bir uygunsuz null tür için geçerli bir değer değildir. Geçerli davranış uygunsuz nullleri karşılaştırmak için = işlecini kullandığınızda bir NullReferenceException harekete geçirmektir, aşağıdaki kodun gösterdiği gibi.

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

Açıklamalar ve dizeler

Önceki sürümlerde, üç alıntılı bir dize içinde (""" kullanan bir dize) bir açıklama kapatma belirteci *) bir dizenin bir parçası olarak çözümlenir. Geçerli sürümde, o belirteç bir açıklama kapatma karakteri olarak çözümlenir. Bu nedenle, daha önce kabul edildi, aşağıdaki kod, geçerli sürümde bir hata üretecektir:

(* """ *)
Let x = 1

Daha fazla bilgi için bkz. Dizeleri (F#).

Farklı alıcı ve ayarlayıcı türlere sahip özellikler.

F#'ın önceki sürümlerinde, F# derleyicisi türlerin eşleşmeyen alıcı ve ayarlayıcı yöntemlere sahip olmasına hatalı olarak izin verir (örneğin, int türü bir alıcı ve string türü bir ayarlayıcı). F# 3.0 içinde, derleyici böyle bir bildirimi hata olarak bildirir.