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 キーワードを適用する必要がなくなりました。 次の例では、両方の式で、F# 4.7 より前のエントリごとに yield ステートメントが必要でした。
let s = seq { 1; 2; 3; 4; 5 }
let daysOfWeek includeWeekend =
[
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
if includeWeekend then
"Saturday"
"Sunday"
]
yield キーワードを 1 つ導入すると、他のすべての項目でもそれに yield を適用する必要があります。
暗黙的中断は、シーケンスのフラット化などを行うために yield! も使用する式で使用されたとき、アクティブになりません。 そのような場合、今でも引き続き yield を使用する必要がありまする
ワイルドカード識別子
クラスが含まれる F# コードでは、メンバー宣言で自己識別子を常に明示する必要があります。 ただし、自己識別子が決して使用されない場合、二重下線を使用し、名前のない自己識別子を示すことが従来の慣習でした。 現在は、アンダースコアを 1 つ使用できるようになりました。
type C() =
member _.M() = ()
これは for ループにも適用されます。
for _ in 1..10 do printfn "Hello!"
インデントの緩和
F# 4.7 より前は、プライマリ コンストラクターと静的メンバーの引数のインデント要件で過剰なインデントが必要でした。 それが今、必要なインデント スコープは 1 つになりました。
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
.NET