F # 4,7 ' deki yenilikler

F # 4,7, F # diline birden çok geliştirme ekler.

başlarken

F # 4,7, tüm .net Core dağıtımlarıyla ve Visual Studio araçları 'nda mevcuttur. Daha fazla bilgi edinmek için F # ile çalışmaya başlayın.

Dil sürümü

F # 4,7 derleyicisi, geçerli dil sürümünüzü proje dosyanızdaki bir özellik aracılığıyla ayarlamanıza olanak sağlar:

<PropertyGroup>
    <LangVersion>preview</LangVersion>
</PropertyGroup>

Bu değeri,, ve değerlerine ayarlayabilirsiniz 4.6 4.7 latest preview . Varsayılan değer: latest.

Olarak ayarlarsanız preview , derleyici, derleyicisinde uygulanan tüm F # Önizleme özelliklerini etkinleştirir.

Örtük olarak verir

Artık, yield türün çıkarsanbileceği diziler, listeler, diziler veya hesaplama ifadelerinde anahtar sözcüğünü uygulamanız gerekmez. Aşağıdaki örnekte her iki ifade de yield F # 4,7 ' den önceki her giriş için deyimi gerektiriyordu:

let s = seq { 1; 2; 3; 4; 5 }

let daysOfWeek includeWeekend =
    [
        "Monday"
        "Tuesday"
        "Wednesday"
        "Thursday"
        "Friday"
        if includeWeekend then
            "Saturday"
            "Sunday"
    ]

Tek bir yield anahtar sözcük belirtirseniz, diğer tüm öğeler de yield buna uygulanmış olmalıdır.

Örtük olarak yapılan değerler, yield! bir diziyi düzleştirmek gibi bir şey yapmak için kullanılan bir ifadede kullanıldığında etkinleştirilmez. Bu durumlarda bugün kullanmaya devam etmeniz gerekir yield .

Joker karakter tanımlayıcıları

Sınıfları içeren F # kodunda, kendi kendine tanımlayıcının üye bildirimlerinde her zaman açık olması gerekir. Ancak, kendi kendine tanımlayıcının hiçbir zaman kullanılmayan durumlarda, genellikle bir ad daha az kendi kendine tanımlayıcı belirtmek için çift alt çizgi kullanma kuralına sahiptir. Artık tek bir alt çizgi kullanabilirsiniz:

type C() =
    member _.M() = ()

Bu, döngüler için de geçerlidir for :

for _ in 1..10 do printfn "Hello!"

Girintileme

F # 4,7 öncesinde, birincil Oluşturucu ve statik üye bağımsız değişkenlerinin girintileme gereksinimleri çok fazla girintileme gerektirdi. Artık yalnızca tek bir girintileme kapsamı gerektirir:

type OffsideCheck(a:int,
    b:int, c:int,
    d:int) = class end

type C() =
    static member M(a:int,
        b:int, c:int,
        d:int) = 1