创建
通过下面简单的例子来学习datatype绑定:
datatype mytype = TwoInts of int * int
| Str of string
| Pizza
- 上面代码定义了一个新类型:其值有int * int或string或无
- 任何值都会被“标记”上信息,让我们能知道它是哪种变体:这些“标记”,即TwoInt、Str、Pizza,我们称为“构造器(constructors)”
- 使用不同的构造器去标记同一类型的底层数据是一种常见的做法
参考:标记/签联合类型
简而言之:
- 有了一个新类型mytype可以使用
- 三个构造器:TwoInt、Str、Pizza
构造器:
- 一个可以创建新类型值的函数(函数:TwoInt : int * int -> mytype;函数:Str : string -> mytype)
- 一个新类型的值(值:Pizza)
使用
获取mytype的值:
- 它是哪一个变体(即哪个构造器创建了该值)
- 解析值(如果它有任何值)
其他“one-of”类型:
如list、option是使用函数来解析其含有的值
- null和isSome确定变体
- hd、tl、valOf解析值(在错误的变体上使用就抛出异常)
所以我们可以做同样的事,例如:
- isTwoInts、isStr、and isPizza,类型:mytype -> bool
- getTwoInts,类型:mytype -> int * int
但是ML并没有采取这种实现方式,它使用了更好的解决办法:Case表达式