如何请求变量的类型 class?
How can I ask for the type class of a variable?
我正在尝试学习 ReasonML,并且我正在做一些 koans 来帮助我完成这项任务。我尝试编写的其中一个 koans 是关于在将列表转换为数组后询问列表的类型。我知道某些语言中有运算符,例如 Haskell (:t
),我们可以在其中询问变量的类型。 ReasonML 是否有等同于 :t
的东西?或者检查 Array.of_list
returns 是否是数组是没有意义的,因为编译器确保...
编译器将确保它是一个数组(当然,除非绕过类型系统),所以我不确定我是否明白练习的意义。另外,我相信 :t
是 ghci
命令,而不是 Haskell 运算符。 rtop
,Reason REPL,将打印每个评估表达式的类型而无需询问,因此据我所知也不需要 :t
命令。
Reason/OCaml 也不携带运行时类型信息。但是,如果编译为 JavaScript,则可以使用 Js.Types
module 访问 JavaScript 运行时类型信息。具体来说,Js.Types.classify
会 return 任何值的 JS 类型,但是当然无法区分 Reason/OCaml 列表和数组,因为它只知道 JavaScript。 Js.typeof
是另一个更轻量级的替代方案,它将 return 字符串而不是变体。
我不太了解 Reason,但是 utop
(改进的 OCaml REPL)提供了 #typeof
指令来检查表达式的类型:
let a = 42;;
val a : int = 42
#typeof "a";;
val a : int
请注意,这只是一个 REPL 工具。在 OCaml 中,类型在运行时不可用:它们在编译期间被剥离。您可以了解更多关于 OCaml 编译过程 here.
正如 @Rizo 在评论中指出的,还有 #show
指令,它甚至在标准 OCaml REPL 中可用:
let a = 43;;
val a : int = 43
#show a;;
val a : int
我正在尝试学习 ReasonML,并且我正在做一些 koans 来帮助我完成这项任务。我尝试编写的其中一个 koans 是关于在将列表转换为数组后询问列表的类型。我知道某些语言中有运算符,例如 Haskell (:t
),我们可以在其中询问变量的类型。 ReasonML 是否有等同于 :t
的东西?或者检查 Array.of_list
returns 是否是数组是没有意义的,因为编译器确保...
编译器将确保它是一个数组(当然,除非绕过类型系统),所以我不确定我是否明白练习的意义。另外,我相信 :t
是 ghci
命令,而不是 Haskell 运算符。 rtop
,Reason REPL,将打印每个评估表达式的类型而无需询问,因此据我所知也不需要 :t
命令。
Reason/OCaml 也不携带运行时类型信息。但是,如果编译为 JavaScript,则可以使用 Js.Types
module 访问 JavaScript 运行时类型信息。具体来说,Js.Types.classify
会 return 任何值的 JS 类型,但是当然无法区分 Reason/OCaml 列表和数组,因为它只知道 JavaScript。 Js.typeof
是另一个更轻量级的替代方案,它将 return 字符串而不是变体。
我不太了解 Reason,但是 utop
(改进的 OCaml REPL)提供了 #typeof
指令来检查表达式的类型:
let a = 42;;
val a : int = 42
#typeof "a";;
val a : int
请注意,这只是一个 REPL 工具。在 OCaml 中,类型在运行时不可用:它们在编译期间被剥离。您可以了解更多关于 OCaml 编译过程 here.
正如 @Rizo 在评论中指出的,还有 #show
指令,它甚至在标准 OCaml REPL 中可用:
let a = 43;;
val a : int = 43
#show a;;
val a : int