Новые возможности F# 4.7
F# 4.7 добавляет несколько улучшений в язык F#.
Начать
F# 4.7 доступен во всех дистрибутивах .NET Core и инструментах Visual Studio. Приступая к работе с F# , чтобы узнать больше.
Версия языка
Компилятор F# 4.7 представляет возможность задать эффективную языковую версию с помощью свойства в файле проекта:
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
Его можно задать для значений 4.6
, 4.7
и latest
preview
. Значение по умолчанию — latest
.
Если этот параметр задан preview
, компилятор активирует все функции предварительной версии F#, реализованные в компиляторе.
Неявные доходы
Больше не нужно применять yield
ключевое слово в массивах, списках, последовательностях или выражениях вычислений, где можно вывести тип. В следующем примере оба выражения требуют инструкции yield
для каждой записи до F# 4.7:
let s = seq { 1; 2; 3; 4; 5 }
let daysOfWeek includeWeekend =
[
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
if includeWeekend then
"Saturday"
"Sunday"
]
Если вы вводите один yield
ключевое слово, к нему также yield
должны применяться все остальные элементы.
Неявные выходы не активируются при использовании в выражении, которое также используется yield!
для выполнения таких действий, как плоская последовательность. В этих случаях необходимо продолжать использовать yield
.
Идентификаторы wild карта
В коде F# с участием классов идентификатор самостоятельно должен всегда быть явным в объявлениях членов. Но в случаях, когда идентификатор самозаписи никогда не используется, оно традиционно было соглашение об использовании двойного подчеркивания для указания безымяных самоидификционных идентификаторов. Теперь можно использовать один символ подчеркивания:
type C() =
member _.M() = ()
Это также относится к for
циклам:
for _ in 1..10 do printfn "Hello!"
Отступы расслабления
До F# 4.7 требования к отступам для основного конструктора и статических аргументов-членов требуют чрезмерной отступы. Теперь для них требуется только одна отступная область:
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