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
关键字。 在下面的示例中,对于 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
关键字,则其他每个项目也必须应用 yield
。
当在还使用 yield!
执行诸如平展序列之类的操作的表达式中使用时,不会激活隐式生成。 在这些情况下,现在必须继续使用 yield
。
通配符标识符
在涉及类的 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