- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
F# 20分钟快速上手(二)这是系列文章的第二篇,读完本文后,您应当能够具备相当的阅读F#代码的能力。1.不可变性(Immutability)您也许已经注意到,我一直使用“值(value)”来表示一个标识符(identifier),而不是“变量(variable)”。这是由于默认情况下,F#中的类型是不可变的(immutable),也就是说,一经创建即不可修改。看起来这是一个很大的限制,但是不可变性可以避免某种类型的bug。另外,不可变的数据天然地具备线程安全的特性,这意味着您无需在处理并行情况时担心同步锁的发生。我将在系列的第三篇中介绍异步编程。 如果您确实需要修改数据,可使用F#的mutable关键字,它会创建一个变量(而不是值)。我们可以通过左箭头操作符(-)来修改变量的值。 let?mutable x = the original value.;;val?mutable x : string printfn xs value is %s x;;xs value is the original value.val it : unit = () x -?the new one.;;val it : unit = () printfn xs value is now %s x;;xs value is now the new one.val it : unit = () 2. 引用值(Reference values,Microsoft.FSharp.Core.Ref_) 引用值是另一种表示可修改数据的方式。但它不是将变量存储在堆栈(stack),引用值其实是一个指向存储在堆(heap)上的变量的指针(pointer)。在F#中使用可修改的值时会有些限制(比如不可以在内部lambda表达式中使用)。而ref对象则可被安全地传递,因为它们是不可变的record值(只是它有一个可修改的字段)。 使用引用值时,用“:=”赋一个新值,使用“!”进行解引用。 let refCell = ref 42;;val refCell : int ref refCell := -1;;val it : unit = () !refCell;;val it : int = –13. 模块(Modules)在上篇文章中,我只是随意地声明了几个值和函数。您也许会问,“要把它们放在哪里呢?”,因为在C#中所有一切都要属于相应的类。尽管在F#中,我们仍然可以用熟悉的方式声明标准的.NET类,但它也有模块的概念,模块是值、函数和类型的集合(可以对比一下命名空间,后者只能包含类型)。这也是我们能够访问“List.map”的原因。在F#库(FSharp.Core.dll)中,有一个名为“List”的模块,它包含了函数“map”。在快速开发的过程中,如果不需要花费时间去设计严格的面向对象类型体系,就可以采用模块来封装代码。要声明自己的模块,要使用module关键字。在下面的例子中,我们将为模块添加一个可修改的变量,该变量也是一个全局变量。module ProgramSettings = let version = let debugMode = ref falsemodule MyProgram = do printfn Version %s ProgramSettings.version open ProgramSettings debugMode := true 4. 元组(Tuples)元组(tuple,发音为‘two-pull’)表示值的有序集合,而这些值可看作一个整体。按传统的方式,如果您要传递一组相关的值,需要创建结构(struct)或类(class),或者还需要“out”参数。使用元组我们可以将相关的值组织起来,同时并不需要引入新的类型。要定义一个元组,只要将一组值用逗号分隔,并用圆括号把它们括起来即可。?let?tuple?=?(1,?false,?text);;val?tuple?:?int?*?bool?*?string?let?getNumberInfo?(x?:?int)?=?(x,?x.ToString(),?x?*?x);;val?getNumberInfo?:?int?-?int?*?string?*?int?getNumberInfo?42;;val?it?:?int?*?string?*?int?=?(42,?42,?1764) 函数甚至可以接受元组为参数:?let?printBlogInfo?(owner,?title,?url)?=?printfn?%ss?blog?[%s]?is?online?at?%s?owner?title?url;;?val?printBlogInfo?:?string?*?string?*?s
您可能关注的文档
最近下载
- 1.医院廉洁党课讲稿(精选).pdf VIP
- 专题07 修辞与仿写(讲义) 五升六语文暑假衔接(统编版).docx VIP
- 2025年执业药师继续教育中药注册管理专门规定参考答案.docx
- GB/T 34531-2017 液化二甲醚钢瓶定期检验与评定.pdf VIP
- 创维电视机说明书_图文.pdf VIP
- 医院科技成果转化合同模板.docx VIP
- 危险化学品企业“5.12 应急准备与响应”解读与应用指南(2025A1)(可编辑!).docx VIP
- 佳能 5D3 _ 5d mark iii-中文手册.pdf VIP
- 胶体与界面化学7重点.ppt VIP
- 【新教材】北师大版(2024)三年级上册数学第六单元 乘除法的应用(二) 教案(表格式).docx
原创力文档


文档评论(0)