Ocaml中的val是什么意思?

6
当看到Ocamel模块的文档时,例如在Graphics模块中,会出现类似以下内容:
val close_graph : unit -> unit

当在交互模式下编写函数时:

# let x () = 3;; 
val x : unit -> int = <fun>

这里有一个代码:val x : unit -> int = <fun>,什么是val以及它的用途是什么?


我一直认为val是该符号的类型签名。 - G4143
1个回答

5

val 是 OCaml 中的关键字,有多种不同的用途。

你提到的情况本质上都是在模块签名中使用 val 来指定出现在模块中的值。值可以是函数和表达式。 (在模块中出现但不是值的内容的示例是类型。)

您可以在 OCaml 手册中了解有关模块签名的信息。

非终端符号 specification 的第一种变体以 val 开头。

(在顶层,您正在创建一个模块,因为您键入定义。 因此,顶层使用签名风格的语法来显示您定义的内容。 至少在我看来是这样。)


我正在查看的代码中有一个模块定义为 module Proof = (val p),这似乎是该关键字的另一个用例。顺便说一下,你提供的链接已经失效了。这个链接解释了两种用法:https://cs3110.github.io/textbook/chapters/modules/modules.html#first-class-modules - David 天宇 Wong
1
是的,当作为值(一等模块)处理时,val 用于解包模块。 - Jeffrey Scofield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接