博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
F# ≥ C# (Pattern matching)
阅读量:6833 次
发布时间:2019-06-26

本文共 1091 字,大约阅读时间需要 3 分钟。

今天这篇文章我们来谈谈F#的,模式匹配在F#中充当着很重要的角色,msdn是这么描述它的:“模式”是用于转换输入数据的规则。模式将在整个 F# 语言中使用,采用多种方式将数据与一个或多个逻辑结构进行比较、将数据分解为各个构成部分,或从数据中提取信息。从某种情况来看,它与C#中的蛮类似的,不过在F#中,模式匹配的功能远远多于switch,好吧,接下来让我们一起享受这次的F#之旅吧~内容不在多,在于精辟易于理解~

在介绍它之前,让我们先来看看如下代码:

let a = 1       //nothing fancylet b = 1, 2  // b is tuple now

这里定义的b是一个,元组这个概念我们之前有聊过,同时也将它与C#中的Swap进行过对比,有兴趣的朋友可以查看详细信息。回到本文,在上面的代码中,对于习惯于C#开发的朋友来说,如果你想要得到元组的第一个和第二个元素,最明显的方式是调用 fst 和 snd 函数,这当然是一种办法,但是现在,我们可以使用模式匹配还达到相同效果:

let c,d = b   // c = 1 and d = 2

接下来,我们来试着使用模式匹配分解一个:

let l = [1;2;3;4]match l with| h::t -> ...     // h is 1 and t is [2;3;4]| _ -> ...

关于::(cons)运算符,它有两个功能,第一是可以将元素附加到列表中,第二是将列表头与列表尾分离,这里使用的是第二个功能。上面的代码中我们看到,一个列表的列表头与列表尾分离开,因此得到了我们想要的结果,那么,如果你需要得到1,2而剩下3,4该怎么做呢?同样很简单,看如下代码:

match l with| h0::h1::t -> ... // h0 is 1, h1 is 2, and t is [3;4]| _ -> ...

如果列表的长度是已知的,比如列举的这个例子,我们的列表只有4个元素,那么你也可以用以下方式分解这个列表:

match l with| [a;b;c;d] ->     //a=1, b=2, c=3, and d=4| _ -> ...

好了,今天的pattern matching介绍完了,是不是有所收获呢?同时,我也很好奇,应该如何使用C#来实现相同的功能。:)

注:此文为译文,如有兴趣请查看blogspot中博主的原文:

 

转载于:https://www.cnblogs.com/Jennifer/archive/2012/11/09/2763039.html

你可能感兴趣的文章
Convert XLS to tab delimited.
查看>>
常用的主机监控Shell脚本
查看>>
添加好友,
查看>>
一:详解 HTTP 协议
查看>>
射手播放器调节字幕
查看>>
系统架构-Aop-IOC-多层低耦合-面向接口的系统架构
查看>>
Web测试方法
查看>>
HTML5介绍
查看>>
图片的title属性和alt属性的区别
查看>>
iOS社会化分享(干货)
查看>>
第八章实验报告
查看>>
使用 gzexe 快速加密解密文件内容
查看>>
java jvm学习笔记十(策略和保护域)
查看>>
C# Task中的Func, Action, Async与Await的使用
查看>>
[百度杯-二月场](Misc-Web)爆破-2
查看>>
移除jQuery绑定的click历史事件
查看>>
时间管理
查看>>
[技巧心得] CSS中文字体对照表
查看>>
[Android Pro] service中显示一个dialog 或者通过windowmanage显示view
查看>>
Linux(CentOS)挂载移动硬盘
查看>>