内容简介:F# 6 已正式发布。F# 6 属于 .NET 6 的一部分,与 .NET 6 一起发布,主要变化包括基于任务的异步、管道调试和其他许多功能,可以让代码更简单、性能更高。 F# 6 包含在 Visual Studio 2022 和 .NET SDK 6.0.100 中...
F# 6 已正式发布。F# 6 属于 .NET 6 的一部分,与 .NET 6 一起发布,主要变化包括基于任务的异步、管道调试和其他许多功能,可以让代码更简单、性能更高。
F# 6 包含在 Visual Studio 2022 和 .NET SDK 6.0.100 中。查看 Visual Studio 2022 和 .NET 6.0 的发布公告了解如何安装 Visual Studio 或 .NET SDK 。
F# 6 增加了对 F# 语言和 F# 交互窗口的几项改进。
F# 6 在 F# 代码中提供了对编写 .NET 任务的原生支持。 例如,使用以下 F# 代码创建 .NET 兼容任务:
let readFilesTask (path1, path2) =
async {
let! bytes1 = File.ReadAllBytesAsync(path1) |> Async.AwaitTask
let! bytes2 = File.ReadAllBytesAsync(path2) |> Async.AwaitTask
return Array.append bytes1 bytes2
} |> Async.StartAsTask
使用 F# 6 可以重写此代码,如下所示:
let readFilesTask (path1, path2) =
task {
let! bytes1 = File.ReadAllBytesAsync(path1)
let! bytes2 = File.ReadAllBytesAsync(path2)
return Array.append bytes1 bytes2
}
F# 6 支持使用 具有默认实现的接口,使用计算表达式生成器 content
:
let mem = new System.IO.MemoryStream("Stream"B)
let content = ContentBuilder()
let ceResult =
content {
body "Name"
body (ArraySegment<_>("Email"B, 0, 5))
body "Password"B 2 4
body "BYTES"B
body mem
body "Description" "of" "content"
}
此处的 body
自定义操作使用不同类型的不同参数。这是使用重载的以下生成器的实现所支持的:
type Content = ArraySegment<byte> list
type ContentBuilder() =
member _.Run(c: Content) =
let crlf = "\r\n"B
[|for part in List.rev c do
yield! part.Array[part.Offset..(part.Count+part.Offset-1)]
yield! crlf |]
member _.Yield(_) = []
[<CustomOperation("body")>]
member _.Body(c: Content, segment: ArraySegment<byte>) =
segment::c
[<CustomOperation("body")>]
member _.Body(c: Content, bytes: byte[]) =
ArraySegment<byte>(bytes, 0, bytes.Length)::c
[<CustomOperation("body")>]
member _.Body(c: Content, bytes: byte[], offset, count) =
ArraySegment<byte>(bytes, offset, count)::c
[<CustomOperation("body")>]
member _.Body(c: Content, content: System.IO.Stream) =
let mem = new System.IO.MemoryStream()
content.CopyTo(mem)
let bytes = mem.ToArray()
ArraySegment<byte>(bytes, 0, bytes.Length)::c
[<CustomOperation("body")>]
member _.Body(c: Content, [<ParamArray>] contents: string[]) =
List.rev [for c in contents -> let b = Text.Encoding.ASCII.GetBytes c in ArraySegment<_>(b,0,b.Length)] @ c
在 F# 6 中,模式的右侧 as
现在可以是模式。 当类型测试为输入提供了更强的类型时,这一点非常重要。 例如以下代码:
type Pair = Pair of int * int
let analyzeObject (input: obj) =
match input with
| :? (int * int) as (x, y) -> printfn $"A tuple: {x}, {y}"
| :? Pair as Pair (x, y) -> printfn $"A DU: {x}, {y}"
| _ -> printfn "Nope"
let input = box (1, 2)
- 缩进语法修订
- 其他隐式转换
- 二进制数字的格式设置
- 使用绑定时放弃
- InlineIfLambda
- 可恢复代码
- 其他集合函数
- Map 包含键和值
- NativePtr 的其他内部函数
- 具有单位批注的其他数值类型
- 很少使用的符号运算符的信息性警告
- F # 工具: .NET 6 用于脚本编写的默认 Visual Studio
- F # 工具:固定 F # 脚本的 SDK 版本
- 删除旧功能
以上所述就是小编给大家介绍的《F# 6 正式发布》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- NPM包(模块)发布、更新、撤销发布
- 有赞灰度发布与蓝绿发布实践
- 【重磅发布】Linkis 0.10.0 版本发布
- BeetlSQL 3.0.9 发布,Idea 插件发布
- 贝密游戏 0.7.0 发布,发布斗地主
- 【重磅发布】DataSphere Studio 0.9.0 版本发布
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。