首页 > 解决方案 > 为什么我对用户 def 类型的强制转换不起作用?

问题描述

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 代码,因此很难知道如何提供帮助 :-)

OCaml 中没有更改值类型的操作。这在强类型语言中是没有意义的。您可以对类型进行一些操作,但“强制转换”不是其中之一。

因此,没有看起来像 的有效表达式(int) expr。正如@glennsl 指出的那样,有一个函数可以返回列表的长度。如果这是您要计算的内容,则可以使用List.length _dimension. 其他出现的(int)你可以删除。它们不是有效的 OCaml。

您的定义在任何地方fn都没有使用类型game,因此game不需要定义。但是,这让我担心您期望定义会产生影响。

如果你在你的编译器定义中遗漏了所有类型的归属,fn那么你的函数将推断出最通用的类​​型。这意味着您可以使用任何列表调用它来检查它的长度。这在 OCaml 中会更惯用。即,您不需要指定这p1是一张卡片列表。该函数对任何列表都有意义。


推荐阅读