3

我正在尝试学习 ReasonML,并且正在做一些 koans 来帮助我完成这项任务。我正在尝试编写的其中一个 koans 是关于在将列表转换为数组后询问列表的类型。我知道在一些语言中,例如 Haskell ( ) 中有运算符:t,我们可以在其中询问变量的类型。:tReasonML有什么等价物吗?或者检查是否Array.of_list返回数组应该没有意义,因为编译器确保......

4

2 回答 2

5

我不太了解 Reason,但是utop(改进的 OCaml REPL)提供了#typeof检查表达式类型的指令:

let a = 42;;
val a : int = 42

#typeof "a";;
val a : int

请注意,这只是一个 REPL 工具。在 OCaml 中,类型在运行时不可用:它们在编译期间被剥离。您可以在此处了解有关 OCaml 编译过程的更多信息。


正如@Rizo在评论中指出的那样,还有该#show指令,甚至在标准 OCaml REPL 中也可以使用:

let a = 43;;
val a : int = 43

#show a;;
val a : int
于 2018-01-02T17:30:54.647 回答
1

编译器将确保它是一个数组(当然,除非已经绕过类型系统),所以我不确定我是否明白练习的意义。另外,我相信:tghci命令,而不是 Haskell 运算符。rtop,Reason REPL,将打印每个评估表达式的类型而无需询问,因此:t据我所知也不需要命令。

Reason/OCaml 也不携带运行时类型信息。但是,如果您编译为 JavaScript,则可以使用该Js.Types模块来访问 JavaScript 运行时类型信息。具体来说,Js.Types.classify将返回任何值的 JS 类型,但当然无法区分 Reason/OCaml 列表和数组,因为它只知道 JavaScript。Js.typeof是另一个更轻量级的替代方案,它将返回一个字符串而不是一个变体。

于 2018-01-02T16:44:48.520 回答