Ocaml中带有参数的类型的数组
|
我要在Ocaml做家庭作业...
我的老师说我们必须使用以下两种类型:
type \'a zapis = Prazen | Zapis of string * \'a;;
type \'a asocpolje = \'a zapis array;;
我的问题是,当我创建一个数组时:
# let a = Array.make 5 Prazen;;
val a : \'_a zapis array = [|Prazen; Prazen; Prazen; Prazen; Prazen|]
我不知道可以在此数组中插入什么值...
a.(0)<-???
有人可以告诉我可以在此数组中插入哪个值吗?
没有找到相关结果
已邀请:
2 个回复
犀耽澄协吻
如果仔细观察,您会发现作为类型参数给出的
已变成
(请注意
)。此类型的意思是“某种类型,但我还不知道哪种类型”。与“ 4”相反,后者表示任何类型。 这意味着您现在可以插入任何种类的Zapis。完成此操作后,您只能插入该特殊类型的Zapis(在其他类型中,
消失并被正确的类型替换)。 所以如果你这样做
将变成
,并且从那时起仅接受整数。 如果您改为
之后它将变成
,仅接受字符串。
骂狮淋唐便
和
是同一类型。根据键入程序精确推断您的定义的方式,您将获得一个或另一个,但它们是完全相同的。
只是
的别名,不是新类型。 您可以使用显式类型注释来帮助OCaml打印正确的类型信息:
但是,我不鼓励这种做法。它的行为方式不是很明显(例如
的含义可能令人吃惊,它没有强制多态性),并且您实际上是想在不存在的地方(类型相同)有所作为。如果您真的想区分这两种类型,则应将
定义为新的代数类型(仅一种情况):