首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态类型:如何?

多态类型:如何?
EN

Stack Overflow用户
提问于 2013-09-20 17:34:23
回答 1查看 77关注 0票数 1

我正在阅读关于Caml中的类型的维基,我必须承认,我很难理解多态类型是如何在语法上处理的,所以一般来说,如何定义多态类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-20 17:45:11

多态在OCaml中出现在许多地方。在这个wiki上讨论的多态类型只是参数化类型。在某种意义上,它们是类型级函数.若要定义单参数类型,请执行以下操作:

代码语言:javascript
复制
type 'a <name> = <definition using 'a>

例如

代码语言:javascript
复制
type 'a tagged = { value: 'a; tag: int }

<definition>部分中,您使用类型名称('a)作为形式参数,代表稍后提供的任何具体类型。

声明类型(将valuetag声明为记录字段)之后,可以创建类型的值:

代码语言:javascript
复制
# { value = "abc"; tag = 4 };;
- : string tagged = {value = "abc"; tag = 4}

编译器推断此值的类型为string tagged,因为value字段具有string类型。

使用括号来定义多个参数类型以将类型参数括起来:

代码语言:javascript
复制
type ('a, 'b) name = <definition using 'a and 'b>

例如:

代码语言:javascript
复制
type ('a, 'b) paired = { first: 'a; second: 'b }

这定义了字段名firstsecond,然后您可以使用它们来创建值:

代码语言:javascript
复制
# { first = 1.5; second = [3] };;
- : (float, int list) paired = {first = 1.5; second = [3]}

总之,生成多态(参数化)类型的语法与生成类型的语法相同,类型参数使用'a这样的符号进行扩展。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18922648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档