2.4.2 介绍差别联合类型
2011-03-27 15:37
162 查看
2.4.2 介绍差别联合类型
在这一节中,我们将关注差别联合(discriminated union)类型,它是基本函数类型之一。我们先看一个示例,说明了它的作用。假设你要写一个处理形状的图形应用程序。我们将使用一种简单的形状表示形式,因此,就选择矩形、椭圆 (由矩形边界的角定义),或由其他两个形状组合的形状。
如果你使用面向对象的概念考虑这个问题,也许说,需要一个抽象类来表示(让我们叫它 Shape)形状,三个派生类表示三种不同的情况 (椭圆、矩形和组合的)。使用面向对象的术语,现在我们心中有四个类来描述这个问题。此外,我们还不知道用形状来做什么。我们有可能会把它们画出来,但还不知道需要哪些参数值来绘图,因此还无法写出 Shape 类的任何抽象方法。
我们最初的想法是比这种成熟的类层次结构更简单:我们只是需要表示三种不同情况下的形状,我们想要定义一个简单的数据结构,用来表示形状——F# 正允许我们这样做:
type Shape =
| Rectangle of Point * Point
| Ellipse of Point * Point
| Composed of Shape * Shape
这段代码创建一个差别联合类型 Shape,它更接近于我们的最初开始描述这个问题时的意图。如你所见,这个类型声明包含三个例,涵盖了三种可能的形状的表示形式。当在 F# 中处理这个类型的值时,我们写出的代码,比如,Rectangle(pt1,pt2), 创建一个矩形。不同于在 C 语言中的联合,这个值被标记了,这意味着,我们总是知道它代表了哪个选项。在下一节我们会看到这一事实,处理差别联合值是相当重要的。
F# 中的通常的开发过程,先设计保持程序数据所需的数据结构,我们将在第 7 至 9 章更加详细探讨这一问题。在下一节中,我们将介绍模式匹配,这一概念使许多典型函数编程任务更容易。虽然模式匹配看上去是与类型不相关的概念,但还是会看到有一些重要的联系。除其他事项外,我们可以使用模式匹配来实现处理差别联合的函数。
在这一节中,我们将关注差别联合(discriminated union)类型,它是基本函数类型之一。我们先看一个示例,说明了它的作用。假设你要写一个处理形状的图形应用程序。我们将使用一种简单的形状表示形式,因此,就选择矩形、椭圆 (由矩形边界的角定义),或由其他两个形状组合的形状。
如果你使用面向对象的概念考虑这个问题,也许说,需要一个抽象类来表示(让我们叫它 Shape)形状,三个派生类表示三种不同的情况 (椭圆、矩形和组合的)。使用面向对象的术语,现在我们心中有四个类来描述这个问题。此外,我们还不知道用形状来做什么。我们有可能会把它们画出来,但还不知道需要哪些参数值来绘图,因此还无法写出 Shape 类的任何抽象方法。
我们最初的想法是比这种成熟的类层次结构更简单:我们只是需要表示三种不同情况下的形状,我们想要定义一个简单的数据结构,用来表示形状——F# 正允许我们这样做:
type Shape =
| Rectangle of Point * Point
| Ellipse of Point * Point
| Composed of Shape * Shape
这段代码创建一个差别联合类型 Shape,它更接近于我们的最初开始描述这个问题时的意图。如你所见,这个类型声明包含三个例,涵盖了三种可能的形状的表示形式。当在 F# 中处理这个类型的值时,我们写出的代码,比如,Rectangle(pt1,pt2), 创建一个矩形。不同于在 C 语言中的联合,这个值被标记了,这意味着,我们总是知道它代表了哪个选项。在下一节我们会看到这一事实,处理差别联合值是相当重要的。
F# 中的通常的开发过程,先设计保持程序数据所需的数据结构,我们将在第 7 至 9 章更加详细探讨这一问题。在下一节中,我们将介绍模式匹配,这一概念使许多典型函数编程任务更容易。虽然模式匹配看上去是与类型不相关的概念,但还是会看到有一些重要的联系。除其他事项外,我们可以使用模式匹配来实现处理差别联合的函数。
相关文章推荐
- 2.4.2 差别联合类型(discriminated union type)
- XCODE中IOS项目文件类型及其作用的介绍
- biztalk中使用.net class类型的消息(一) -- 相关知识介绍
- 单例的两种类型,以及介绍
- MYSQL SET类型字段的SQL操作知识介绍
- js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
- 有关PHP表单中 input type类型的介绍
- 几种电容类型简单介绍
- C/C++的数据类型介绍
- MYSQL中常用数据类型介绍
- Redis常用数据类型介绍、使用场景及其操作命令
- LVS概念类型及三种工作模式和十种调度算法介绍
- 简单查询和联合查询两方面介绍SQL查询语句
- javascript的数据类型、字面量、变量介绍
- python数字类型介绍以及创建数字值对象引用、删除数字值引用操作实例
- 服务器硬盘类型介绍及选型
- Java 设计模式 接口型模式 之 类型介绍 (一)
- C#类型介绍与运算注意事项
- MySQL BLOB 类型介绍
- (Erlang语言)数据类型详细介绍——binary