Ocaml 类型中的 Int 的 Int

Posted

技术标签:

【中文标题】Ocaml 类型中的 Int 的 Int【英文标题】:Int of Int in Ocaml types 【发布时间】:2018-10-30 03:15:53 【问题描述】:

在一个作业中,我有两个用户定义的类型。 a 类型使用INT of int,b 类型使用Int of int。据我了解,这意味着这两种类型都可以接受 int 作为该类型的一部分。有没有办法在类型a和b之间进行转换?我试过像

这样的类型转换
let typeA = INT 5
let typeB = Int 5
let cast = INT(typeB)

但这会引发类型不匹配错误。

【问题讨论】:

您需要明确编写一个函数,该函数将从Int 中“提取”值并使用该值创建一个新的INT 【参考方案1】:

OCaml 是一种强类型语言,因此通常无法将一种类型“类型转换”到另一种类型。

但是,您可以编写一个将一种类型转换为另一种类型的函数。例如,有一个名为float_of_int 的内置函数将float 转换为int。还有int_of_float(它会丢弃浮点值的任何小数部分)。

您可以轻松地以类似的精神编写函数来在您的两种类型之间进行转换。

这里有一些代码包含你需要的所有想法(我认为):

type mytype = MyConstructor of int

let increment (MyConstructor x) = MyConstructor (x + 1)

【讨论】:

以上是关于Ocaml 类型中的 Int 的 Int的主要内容,如果未能解决你的问题,请参考以下文章

在处理数据结构中的复杂键(如 int*int*int)时,F# 比 Ocaml 慢得多

OCaml 表达式类型问题

Sys.mkdir ocaml 中的 int 参数是啥

Ocaml - 字符串到 (int*int*int) 列表

可以在 OCaml 中的类型之间编码二进制函数吗?

Ocaml 值与模块和签名中的参数化类型不匹配