如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

理解和应用 F#中的“use”语法

  • 2007-08-27
  • 本文字数:1356 字

    阅读完需:约 4 分钟

F#是一个运行在 CLR 之上的函数式语言。尽管是一个研究性语言,它还是具有几个值得称道的地方,比如是第一个支持泛型的.NET 语言。

在最近关于F# 1.9.2 的帖子中, Don Syme 谈论到了“use”语法。本质上它不是那么有趣,仅仅是提供了对于 C#和 VB 开发人员来说很熟悉的 Using 结构的支持。实际上,“use”本身并没有比可以在 F#中轻易写出的“using”函数强大多少。

作为一个未来可能的增强部分,Don Syme 提到“use”语法能运用在类级别的代码中。如果是这样的,那么 IDisposable 模式将能被编译器自动实现。

在我们继续讲解之前,让我们花点时间来看看 IDisposable 模式。下面的代码是随 Visual Basic 一起发布的代码片段。

<span size="2"><span>Class</span> ResourceClass<br></br><span>Implements</span> IDisposable<p><span>Private</span> disposed <span>As</span> <span>Boolean</span> = <span>False</span> <span>' To detect redundant calls</span></p><p><span>' IDisposable</span><span>Protected</span> <span>Overridable</span> <span>Sub</span> Dispose(<span>ByVal</span> disposing <span>As</span> <span>Boolean</span>)</p><br></br><span>If</span> <span>Not</span> <span>Me</span>.disposed <span>Then</span><br></br><span>If</span> disposing <span>Then</span><p><span>' Free other state (managed objects).</span><span>End</span> <span>If</span></p><p><span>' Free your own state (unmanaged objects).</span><span>' Set large fields to null.</span><span>End</span> <span>If</span></p><br></br><span>Me</span>.disposed = <span>True</span><br></br><span>End</span> <span>Sub</span><p><span>#Region</span> <span>" IDisposable Support "</span></p><p><span>' This code added by Visual Basic to correctly implement the disposable pattern.</span><span>Public</span> <span>Sub</span> Dispose() <span>Implements</span> IDisposable.Dispose</p><p><span>' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.</span> Dispose(<span>True</span>)</p><br></br> GC.SuppressFinalize(<span>Me</span>)<br></br><span>End</span> <span>Sub</span><p><span>Protected</span> <span>Overrides</span> <span>Sub</span> Finalize()</p><p><span>' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.</span> Dispose(<span>False</span>)</p><br></br><span>MyBase</span>.Finalize()<br></br><span>End</span> <span>Sub</span><p><span>#End Region</span><span>End</span> Class</p></span>正如你看到的,有太多额外的东西需要写。就算类没有包含任何非托管资源,允许去除 Finalize 方法,还是需要写很多东西。到最后,依旧还有缺陷,因为没有错误处理代码,这会是按照这种方法编写代码遇到的一个主要问题。

这就是真正能感受到研究性语言带来的影响所在。通过把 F#的这个想法运用到 VB 和 C#中,我们将能把所有的这些八股代码简化为一个单独的方法,以便自动处理非托管对象。

查看英文原文: The “use” Binding In F# and How It Should Be Applied To C# and VB

2007-08-27 21:511906
用户头像

发布了 254 篇内容, 共 69.1 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

利物浦都在用的AI教练,真能拯救国足吗?

脑极体

AI

FittenChat:程序员写代码的最好辅助利器,没有之一

知识浅谈

编程 AI

科技助力上亿用户隐私安全保护,合合信息两款产品再获CCIA PIA星级标识

合合技术团队

信息安全 隐私保护 合合信息 名片全能王 启信宝

NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]

汀丶人工智能

大模型 text2sql NL2SQL

大报文之道:优化策略与实践

京东科技开发者

LED电子显示屏助广告媒体转型

Dylan

媒体 广告 电子 LED显示屏 led显示屏厂家

计算机专业必须掌握的脚本开发语言—shell

算法的秘密

2024石家庄矿业展|石家庄矿山展会|石家庄矿业矿山展览会

coal煤博会

河北矿业展览会 河北矿山展览会 河北矿博会 石家庄矿山展

2024河北煤炭装备展览会|河北采煤装备展会|河北煤博会

coal煤博会

面试官追问的STW,到底什么是STW?有什么影响?

派大星

JVM Java 面试题

品牌升级 | 图扑物联正式启用新LOGO

图扑物联

LOGO 品牌 工业物联网 组态 web组态软件

阿里云超大规模边缘容器云助力应用全球化部署

MasterInTech

阿里云 边缘云 边缘容器

Python中两种网络编程方式:Socket和HTTP协议

华为云开发者联盟

Python 华为云 HTTP协议 华为云开发者联盟 企业号2024年4月PK榜

Penpad获OKX 、Scroll生态大力支持,ETH质押创新高

石头财经

使用 TypeScript 从零搭建自己的 Web 框架: Electron 环境运行

RoyLin

typescript

Pet Peeve

Echo!!!

English

重塑新格局,拥抱新机遇|2024超聚变合作伙伴大会成功举办

彭飞

X314协议市值机器人

区块链技术

如何熟悉一个陌生系统

京东科技开发者

运用指针轻松实现多个数据排列

芯动大师

PLC PLC-IoT

Penpad生态再迎新进展,Season 2 ETH 质押量超200万美元

BlockChain先知

2024石家庄煤炭展|石家庄采煤展会|石家庄煤炭装备展览会

coal煤博会

河北煤炭展会 河北煤化工展览会 河北煤博会 石家庄煤炭展会 石家庄煤炭展览会

2024河北矿业装备展览会|河北智慧矿山展览会|河北矿业展会

coal煤博会

KaiwuDB CTO 魏可伟:AIoT,用行业定义数据库

KaiwuDB

数据库 AIOT AIoT数据库

「Saturn 4 Ultra土星」开启光固化3D智能打印新潮向

科技热闻

理解和应用F#中的“use”语法_.NET_Jonathan Allen_InfoQ精选文章