在ML中是否可以允许ML中的变量具有多种类型?
例如,如果我希望树中的节点只是一个int或一个字符串。
Node of int * string
我试过这个,但它只会产生一个元组类型(int,string)。我不希望它是一个元组,只是一个int或一个字符串。这是允许的吗?
答案 0 :(得分:3)
正如评论中所指出的,您正在寻找的功能是联合类型。我相信它们在SML中的语法是:
datatype Node = IntNode of int
| StringNode of string
答案 1 :(得分:1)
只是为了概括@TimDestan的一个很好的答案: 一种或的另一种值的一般概念可以在一种类型中编码。例如,在Haskell和Scala中,我们有Either
类型,它只能保存两种不同类型的值。我们可以在SML中定义相同的内容:
datatype ('a, 'b) either = Left of 'a | Right of 'b
现在您可以将节点编码为:
Node of (int, string) either
节点可以构造成:
Node (Left 1)
Node (Right "hello")
这比为此案例定义自定义和类型要轻一些。