F# 4.7'deki yeniliklerWhat's new in F# 4.7

F# 4.7, F# diline birden fazla iyileştirme ekler.F# 4.7 adds multiple improvements to the F# language.

Kullanmaya başlayınGet started

F# 4.7 tüm .NET Core dağıtımlarında ve Visual Studio araçlamalarında mevcuttur.F# 4.7 is available in all .NET Core distributions and Visual Studio tooling. Daha fazla bilgi edinmek için F# ile başlayın.Get started with F# to learn more.

Dil sürümüLanguage version

F# 4.7 derleyicisi, etkili dil sürümünüzü proje dosyanızdaki bir özellik üzerinden ayarlama olanağını sunar:The F# 4.7 compiler introduces the ability to set your effective language version via a property in your project file:

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

Değerleri 4.6, , , 4.7 latestve preview.You can set it to the values 4.6, 4.7, latest, and preview. Varsayılan değer: latest.The default is latest.

Eğer previewayarlarsanız, derleyiciniz derleyicinizde uygulanan tüm F# önizleme özelliklerini etkinleştirir.If you set it to preview, your compiler will activate all F# preview features that are implemented in your compiler.

Örtük verimlerImplicit yields

Artık anahtar kelimeyi, yield türün çıkarılabildiği dizilerde, listelerde, dizilerde veya hesaplama ifadelerinde uygulamanız gerekmez.You no longer need to apply the yield keyword in arrays, lists, sequences, or computation expressions where the type can be inferred. Aşağıdaki örnekte, her iki yield ifade f# 4.7 önce her giriş için deyimi gerekli:In the following example, both expressions required the yield statement for each entry prior to F# 4.7:

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

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

Tek yield bir anahtar kelime tanıtıyorsanız, yield diğer tüm öğede de uygulanmış olması gerekir.If you introduce a single yield keyword, every other item must also have yield applied to it.

Örtük verimler, bir diziyi düzleştirmek yield! gibi bir şey yapmak için de kullanan bir ifadede kullanıldığında etkinleştirilmez.Implicit yields are not activated when used in an expression that also uses yield! to do something like flatten a sequence. Bu gibi durumlarda yield bugün kullanmaya devam etmelisiniz.You must continue to use yield today in these cases.

Joker karakter tanımlayıcılarıWildcard identifiers

Sınıfları içeren F# kodunda, öz tanımlayıcının üye bildirimlerinde her zaman açık olması gerekir.In F# code involving classes, the self-identifier needs to always be explicit in member declarations. Ancak kendini tanımlayıcının hiç kullanılmadığı durumlarda, isimsiz bir öz tanımlayıcıyı belirtmek için bir çift alt çizgi kullanmak geleneksel olarak bir gelenektir.But in cases where the self-identifier is never used, it has traditionally been convention to use a double-underscore to indicate a nameless self-identifiers. Artık tek bir alt alt alt puan kullanabilirsiniz:You can now use a single underscore:

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

Bu döngüler for için de geçerlidir:This also applies for for loops:

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

Girintisi gevşemeleriIndentation relaxations

F# 4.7'den önce, birincil oluşturucu ve statik üye bağımsız değişkenler için girinti gereksinimleri aşırı girinti gerektiriyor.Prior to F# 4.7, the indentation requirements for primary constructor and static member arguments required excessive indentation. Artık yalnızca tek bir girintin kapsamı gerektirir:They now only require a single indentation scope:

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