为什么我对用户定义类型的转换不起作用?
Why my cast on user def type doesnt work?
type card = int
type game = { dimension : int; p1 : card list; }
let fn (_dimension : int) (p1 : card list) : bool =
(int)p1 = (int)_dimension * 2
我想检查 p1 是否恰好是维度大小的两倍。
您的代码看起来不太像 OCaml 代码,因此很难知道如何提供帮助:-)
OCaml 中没有更改值类型的操作。这在强类型语言中没有意义。您可以使用类型做一些事情,但“转换”不是其中之一。
因此,不存在类似于 (int) expr
的有效表达式。正如@glennsl 指出的那样,有一个 returns 列表长度的函数。如果这就是您要计算的内容,则可以使用 List.length _dimension
。您可以删除其他出现的 (int)
。它们不是有效的 OCaml。
您对 fn
的定义没有在任何地方使用类型 game
,因此 game
的定义是不必要的。但是,这让我担心您期望定义会产生影响。
如果您在 fn
的定义中省略所有类型归属,编译器将为您的函数推断出最通用的类型。这意味着您可以使用任何列表调用它来检查其长度。这在 OCaml 中会更加地道。也就是说,您不需要指定 p1
是卡片列表。该函数对任何列表都有意义。
type card = int
type game = { dimension : int; p1 : card list; }
let fn (_dimension : int) (p1 : card list) : bool =
(int)p1 = (int)_dimension * 2
我想检查 p1 是否恰好是维度大小的两倍。
您的代码看起来不太像 OCaml 代码,因此很难知道如何提供帮助:-)
OCaml 中没有更改值类型的操作。这在强类型语言中没有意义。您可以使用类型做一些事情,但“转换”不是其中之一。
因此,不存在类似于 (int) expr
的有效表达式。正如@glennsl 指出的那样,有一个 returns 列表长度的函数。如果这就是您要计算的内容,则可以使用 List.length _dimension
。您可以删除其他出现的 (int)
。它们不是有效的 OCaml。
您对 fn
的定义没有在任何地方使用类型 game
,因此 game
的定义是不必要的。但是,这让我担心您期望定义会产生影响。
如果您在 fn
的定义中省略所有类型归属,编译器将为您的函数推断出最通用的类型。这意味着您可以使用任何列表调用它来检查其长度。这在 OCaml 中会更加地道。也就是说,您不需要指定 p1
是卡片列表。该函数对任何列表都有意义。