Nyheter i F# 4.7
F# 4.7 lägger till flera förbättringar av F#-språket.
Kom igång
F# 4.7 finns i alla .NET Core-distributioner och Visual Studio-verktyg. Kom igång med F# om du vill veta mer.
Språkversion
F# 4.7-kompilatorn introducerar möjligheten att ange din effektiva språkversion via en egenskap i projektfilen:
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
Du kan ange värdena 4.6
, , 4.7
latest
och preview
. Standardvärdet är latest
.
Om du anger det till preview
aktiverar kompilatorn alla F#-förhandsversionsfunktioner som implementeras i kompilatorn.
Implicita avkastningar
Du behöver inte längre använda nyckelordet yield
i matriser, listor, sekvenser eller beräkningsuttryck där typen kan härledas. I följande exempel krävde båda uttrycken instruktionen yield
för varje post före F# 4.7:
let s = seq { 1; 2; 3; 4; 5 }
let daysOfWeek includeWeekend =
[
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
if includeWeekend then
"Saturday"
"Sunday"
]
Om du introducerar ett enda yield
nyckelord måste alla andra objekt också ha yield
tillämpats på det.
Implicita avkastningar aktiveras inte när de används i ett uttryck som också använder yield!
för att platta ut en sekvens. Du måste fortsätta att använda yield
idag i dessa fall.
Jokerteckenidentifierare
I F#-kod som involverar klasser måste självidentifieraren alltid vara explicit i medlemsdeklarationer. Men i fall där självidentifieraren aldrig används har det traditionellt varit konvention att använda ett dubbelt understreck för att indikera namnlösa självidentifierare. Nu kan du använda ett enda understreck:
type C() =
member _.M() = ()
Detta gäller även för for
loopar:
for _ in 1..10 do printfn "Hello!"
Indragsavslappningar
Före F# 4.7 krävde indragskraven för primära konstruktor- och statiska medlemsargument överdriven indrag. De kräver nu bara ett enda indragsomfång:
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