F#5.0新特征总结

简介: F# 5.0随着.NET 5.0一起发布,.NET 5.0是为了让更多的开发人员能够将他们的.NET Framework代码和应用程序迁移到.NET5.0。它是.NET Framework和.NET Core核心的结合,旨在统一.NET平台。F# 5.0 引入了几个新特征,其中的字符串插值和统一切片行为是个人感觉非常实用的功能,这里重点介绍。

    当前的F#最新版本已经升级到5.0了,它随着.NET 5 SDK一起发布,也添加了不少新的特征。这些特征有的是非常强大的。下面会根据微软官网的F#说明文档进行详细的介绍。这里需要注意一下,新版本的F# 5.0 需要首先解决SDK升级或者重新安装的问题,并根据需要升级Visual Studio版本,否则可能会发现虽然安装了最新的 .NET 5 SDK,但是在Visual Studio新建项目时,无法选择到F# 5.0版本。

   1 环境准备

     首先从官网https://dotnet.microsoft.com/download 上下载 .NET 5.0 SDK,如下图所示。这里需要根据自身操作系统来决定下载什么版本,如果是Linux操作系统,需要下载Linux页签下的.NET 5.0 SDK,同理,MacOS操作系统则需要下载MacOS页签下的.NET 5.0 SDK 。

0.jpg     这里的演示环境是基于Visual Stuido 社区版(免费),其版本为16.10.2 ,如果比这个低的话,建议升级到此版本或者更高。Visual Stuido 是微软推出的一款非常强大的开发IDE,可以很好的提升我们开发代码的效率,并进行代码调试。

1(8).jpg

     当基本的软件环境搭建完成后,可以利用Visual Stuido 社区版新建一个F#控制台项目,并设置SDK版本为5.0。

2(5).jpg

     至此,我们就可以愉快的进行F# 5新特征体验了。

   2 F# 5 新特征演示

     首先,介绍一下字符串插值(String interpolation),它有的类似于C#或者JavaScript语言中的新特征。这个字符串插值是在字符串前利用特殊字符$来表示,且占位的字符为{变量名},这样就可以把定义的变量进行值的替换。另外,它还是至此调用当前上下文中定义的变量值或者方法,对数据进行处理。下面给出一个示例:

[<EntryPoint>]
letmainargv=//String interpolationletversion="5.0"letlng="F#"printfn$"Language : {lng}, Version: {version}"printfn$"pi = {System.Math.PI}"printfn$" 2 * 3 - 1 = { 2 * 3 - 1 }"

运行此示例,结果如下:

3(5).jpg

另外,这个特征还允许用%Type进行类型限定,如果编译器检测出类型不匹配,则在编码阶段即可抛出错误。如下图所示:

4(3).jpg

    由于变量version是一个字符串类型的值,这里的%d代码一个数值类型,因此不匹配,在编码阶段编译器就可以识别出错误,并用红色波浪线标注。最后,这个特征最牛的地方是可以运行字符类型的代码,这个功能太强了,虽然有一定的安全隐患。下面给出一个示例:

openSystemletaddxy=x+yletsquarex=x*x[<EntryPoint>]
letmainargv=//String interpolationletstr_code=$"""run code demo:    {
letstart=1lete=addstart2letoddSquaresxs=xs|>List.mapsquareletret=oddSquares [start..e]
sprintf"%O"ret    }
"""printfn$"{str_code}"0// return an integer exit code

    运行此程序,结果如下:

5(6).jpg

     其次,介绍一下切片(Slice)一致性,在F# 5.0之前,对于array,string , list 在特定的情况下,返回的切片结果可能是不一致的。而F# 5.0 后,这几种数据结构切片的行为是一致的。下面给出一个示例:

//切片一致性letlist01= [ 2..9 ]
letarray01= [|2..9|]
letstr01="23456789"leteList=list01.[1..3]
printfn$"{eList}"leteArray=array01.[1..3]
printfn$"%A{eArray}"leteString=str01.[1..3]
printfn$"{eString}"

运行此程序,结果如下:

6(4).jpg

    当然,F# 5 还支持反向索引(reverse indexes),下面给出示例:

//反向索引(reverse indexes)letxs= [1..10]
letlt=xs.[^1..]
printfn$"{lt}"//[9; 10]letlt=xs.[..^7] 
printfn$"{lt}"//[1; 2; 3]letlt=xs.[^3..^1]
printfn$"{lt}"//[7; 8; 9]

这个是一个preview功能,需要如下配置<LangVersion>preview</LangVersion>才能运行,如下所示:

<PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net5.0</TargetFramework><LangVersion>preview</LangVersion><WarnOn>3390;$(WarnOn)</WarnOn></PropertyGroup>

最后,其他的新特征可以访问官网进行了解,网址为 https://docs.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-50

相关文章
|
XML 存储 数据可视化
XML DTD原理及使用
是一种可扩展的标记语言,用于存储和交换数据,它被设计成具有简单、易于理解的格式,并能够方便地在不同的系统和应用程序之间共享数据。XML的语法规则类似于HTML,但XML的目的不仅仅是用于显示数据,更是用于描述数据的结构和关系。与HTML相比,XML更加严格和规范,它需要通过或RELAX NG等方式定义文档的结构,同时还可以使用命名空间和XSLT等技术来处理和转换XML文档。独立于任何特定的操作系统、平台或开发环境。可以与许多不同的编程语言和应用程序进行交互。
|
Shell 开发工具 git
git拉取分支的方法?
1.在工作空间下,右键,选择Git Bash 进入到里面
421 0
|
Kubernetes Unix Shell
Kubernetes:为容器设置启动时要执行的命令及其入参
Kubernetes:为容器设置启动时要执行的命令及其入参
|
3月前
|
人工智能 调度 对象存储
阿里云人工智能平台PAI免费试用:DSW、EAS和DLC免费政策、查询及领取全流程
阿里云PAI平台推出2026年最新免费试用政策,涵盖DSW、EAS和DLC三大服务。新用户可领取独立试用资源:DSW享750计算时(3个月),EAS获500元抵扣金(1个月),DLC提供100计算时(3个月)。需先领后用,额度用尽或到期未停服将转按量计费。支持多地域与多种规格,建议及时停止实例避免额外费用。详情及领取入口见官方页面。
|
4月前
|
Java 数据库连接 微服务
Java高效学习指南:从入门到精通的科学路径与实践方法
本文系统梳理Java从入门到精通的科学学习路径,涵盖基础语法、面向对象、集合框架、并发编程、JVM原理、主流框架(Spring/Spring Boot/MyBatis)及项目实战,结合高效学习方法与优质资源推荐,助力开发者构建扎实技术体系,少走弯路,快速进阶。
|
9月前
|
缓存 安全 测试技术
精选API实战问答,解决开发中的疑难杂症
这是一份精选的 API 开发高频问题与解决方案合集,涵盖基础概念、设计规范、安全认证、调试测试、性能优化等十大主题。每日学习 1-2 个问题,结合实战应用,快速掌握 API 开发核心技能,高效解决开发中的各类疑难杂症,适合开发者构建系统化知识体系。
|
11月前
|
SQL 关系型数据库 大数据
数据同步平台,实现全链路同步与流通
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
数据采集 存储 缓存
如何让 WordPress 快起来?Websoft9 教您实操
在数字时代,网站速度至关重要。本文深入分析了导致 WordPress 网站速度慢的真正原因,包括计算资源不足、插件臃肿、主题复杂、第三方资源加载慢等,并提供了详细的优化方案,帮助网站提升性能,还 WordPress 一个“公道”。
611 3
|
存储 关系型数据库 数据库
数据的反规范化架构
【6月更文挑战第13天】 本文介绍数据库设计包括规范化和反规范化。优化设计和应用规范化规则确保高效且准确的数据存储。
552 2
数据的反规范化架构
|
网络架构
网络拓扑
【8月更文挑战第19天】网络拓扑
2056 1

热门文章

最新文章