Datatype绑定(Datatype Bingdings)

创建

通过下面简单的例子来学习datatype绑定:

datatype mytype = TwoInts of int * int
                | Str of string
                | Pizza
  • 上面代码定义了一个新类型:其值有int * intstring或无
  • 任何值都会被“标记”上信息,让我们能知道它是哪种变体:这些“标记”,即TwoInt、Str、Pizza,我们称为“构造器(constructors)”
  • 使用不同的构造器去标记同一类型的底层数据是一种常见的做法
    参考:标记/签联合类型

简而言之:

  • 有了一个新类型mytype可以使用
  • 三个构造器:TwoInt、Str、Pizza

构造器:

  1. 一个可以创建新类型值的函数(函数:TwoInt : int * int -> mytype;函数:Str : string -> mytype
  2. 一个新类型的值(值:Pizza

使用

获取mytype的值:

  1. 它是哪一个变体(即哪个构造器创建了该值)
  2. 解析值(如果它有任何值)

其他“one-of”类型:
list、option是使用函数来解析其含有的值

  • nullisSome确定变体
  • hd、tl、valOf解析值(在错误的变体上使用就抛出异常)

所以我们可以做同样的事,例如:

  • isTwoInts、isStr、and isPizza,类型:mytype -> bool
  • getTwoInts,类型:mytype -> int * int

但是ML并没有采取这种实现方式,它使用了更好的解决办法:Case表达式

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。