F# 20分钟快速上手(二)

这是系列文章的第二篇,读完本文后,您应当能够具备相当的阅读F#代码的能力。

1.不可变性(Immutability)

您也许已经注意到,我一直使用“值(value)”来表示一个标识符(identifier),而不是“变量(variable)”。这是由于默认情况下,F#中的类型是不可变的(immutable),也就是说,一经创建即不可修改。看起来这是一个很大的限制,但是不可变性可以避免某种类型的bug。另外,不可变的数据天然地具备线程安全的特性,这意味着您无需在处理并行情况时担心同步锁的发生。我将在系列的第三篇中介绍异步编程。

如果您确实需要修改数据,可使用F#的mutable关键字,它会创建一个变量(而不是值)。我们可以通过左箭头操作符(<-)来修改变量的值。

> let mutable x = "the original value.";;
val mutable x : string
> printfn "x's value is '%s'" x;;
x's value is 'the original value.'
val it : unit = ()

> x <- "the new one.";;
val it : unit = ()
> printfn "x's value is now '%s'" x;;
x's 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 = –1

3. 模块(Modules)

在上篇文章中,我只是随意地声明了几个值和函数。您也许会问,“要把它们放在哪里呢?”,因为在C#中所有一切都要属于相应的类。尽管在F#中,我们仍然可以用熟悉的方式声明标准的.NET类,但它也有模块的概念,模块是值、函数和类型的集合(可以对比一下命名空间,后者只能包含类型)。

这也是我们能够访问“List.map”的原因。在F#库(FSharp.Core.dll)中,有一个名为“List”的模块,它包含了函数“map”。

在快速开发的过程中,如果不需要花费时间去设计严格的面向对象类型体系,就可以采用模块来封装代码。要声明自己的模块,要使用module关键字。在下面的例子中,我们将为模块添加一个可修改的变量,该变量也是一个全局变量。

module ProgramSettings =
let version = "1.0.0.0"
let debugMode = ref false
module MyProgram =
do printfn "Version %s" ProgramSettings.version
open ProgramSettings
debugMode := true

时间: 2024-11-05 12:13:50

F# 20分钟快速上手(二)的相关文章

Extjs4快速上手二——基础知识(一)

原文 http://www.cnblogs.com/good-temper/archive/2013/04/02/2996544.html 首先声明一下,在此介绍的内容多数来自"Extjs中文学习手册",这好像是一位前辈的博文整理,想快速全面学习Extjs4的可以看一下.      1.1 下载Extjs4                下载地址:http://extjs.org.cn/ (也可以去官方下),版本4.1.1      1.2 在项目中加入Extjs文件        

Extjs4快速上手二——基础知识(二)

原文 http://www.cnblogs.com/good-temper/archive/2013/04/07/3003270.html 事隔几天继续开写,由于水平所限理论的东西写起来的确很费劲,现在就将就着写吧,等后边的实践部分或许会好点.今天主要讲讲Extjs4的MVC. 1.1  谈谈MVC MVC,这个概念或许算是当下最流行的设计模式,java中的SSH.SpringMVC,.net的MVC框架,php的smarty等,哪门语言不来个MVC框架都不好意思说自己是主流的.下边是贴过来的一

JavaWeb工程中集成YMP框架快速上手(二)_java

本文将介绍如何在Java Web工程中集成YMP框架,操作过程基于IntelliJ IDEA做为开发环境,工程结构采用Maven构建: IntelliJ IDEA下载地址: https://www.jetbrains.com/idea/download/ Maven下载地址: http://maven.apache.org/ 创建项目 1. 打开IDEA开发环境并点击Create New Project按钮开始创建新项目向导,如下图-1所示: 2. 在New Project窗口中选中左侧Mave

数据库工程师快速上手MaxCompute进行ETL

案例说明 本案例主要是介绍如何通过数加MaxCompute+大数据开发套件两个产品实现简单的网站数据统计分析. 适用人群 MaxCompute初学者,特别是无大数据开发基础但有数据库使用基础. 案例侧重 数据库工程师快速上手MaxCompute进行大数据开发,简单了解在MaxCompute做大数据ETL过程,同时了解一些MaxCompute SQL和常用数据库SQL的基本区别. 示例介绍 房产网上经常会看到一些排行榜,如最近30日签约的楼盘排行.签约金额的楼盘排行等,本示例我们简单介绍通过对二手

20分钟 Awk 入门

20分钟 Awk 入门 什么是Awk Awk是一种小巧的编程语言及命令行工具.(其名称得自于它的创始人Alfred Aho.Peter Weinberger 和 Brian Kernighan姓氏的首个字母).它非常适合服务器上的日志处理,主要是因为Awk可以对文件进行操作,通常以可读文本构建行. 我说它适用于服务器是因为日志文件,转储文件(dump files),或者任意文本格式的服务器终止转储到磁盘都会变得很大,并且在每个服务器你都会拥有大量的这类文件.如果你经历过这样的情境--在没有像Sp

深度技术GHOSTXP八分钟快速装机版 V3.5BT版 下载_常用工具

深度Ghost XP 快速装机版3.5_八分钟装机板,此次制作的版本 我们自己经过多次的测试 编号:        1                                                    2 cpu:    毒龙1.1                                        赛扬1.3 主板:    KT333                                          Intel815 内存:    512     

20分钟成功编写bootstrap响应式页面 就这么简单_javascript技巧

最近发现一个叫 Bootstrap 的好东西,Bootstrap 是现在最流行的响应式 CSS 框架,它以移动设备优先,能够快速适应不同设备.使用它编写响应式页面快捷.方便,而且屏蔽了浏览器差异.使用了 Bootstrap 后,再也无法想象过去使用原始的 CSS 编写网页的悲惨生活了. 经过学习,我发现自己也具备了分分钟开发出一个高大上的页面的能力.本文将会为大家介绍 Bootstrap,并且带领大家一起实现一个响应式页面.图 1. 移动优先,适应不同设备 一.安装最简单的方式是直接在网页中引用

亮齿堂:20分钟极速美白牙齿

亲爱的朋友! 你对自己现在的牙齿满意吗? 是否又因为自己的牙齿黯淡发黑二不愿开怀大笑? 是否为由于喝咖啡.喝茶.吸烟而发黄的牙齿感到苦恼呢? 是否因为一口四环素牙而缺乏自信? b-white牙齿美白技术被专业人士确认为最新的高科技 安全而有效的牙齿美白方式. 牙齿美白是一项已有百年发在历史的技术.b-white篮光牙齿美白技术把美白牙齿带进了一个更高,更安全,更有效,更舒适的崭新领域.独特的篮光技术与特殊美白因子加上专利牙套的结合使用能够在更安全,更有效的基础上重塑您的闪亮笑容. 根据实际使用表

20分钟,1万个618手机T码,天猫微博首尝手机预购码战果累累

新浪科技讯 6月16日晚间消息,微博与天猫联合推出"1分钱专享天猫T码"的活动,仅用20分钟,1万个618当天可在天猫优先购买手机的T码就被一抢而空.这是双方首次进行此类商业化合作. 此次活动的相关负责人士称,T码的付款转化率高于90%,远超过小米.此前,小米也多次通过微博进行F码的社会化营销. 据悉,"T码"是天猫"TMALL码"的简称,是天猫发放的一组由数字和字母组成的16位资格码,用户成功绑定商品后,可以获得618当天0-1点,爆款手机优先