在 ocaml 中,如何理解如下定义:
let () = print_endline "hello world"
ocaml 中的 Let 定义应该看起来像 let x = e 但上面的“()”不是变量。那么那里发生了什么?
我认为这样写会更有意义:
let _:unit = print_endline "hello world"
let 绑定的语法是“pattern = expression`。大多数情况下,模式将是变量名、通配符或它们的元组模式,但每种类型的适当类型的模式都是有效的。
语义是表达式将与模式匹配,如果匹配成功,则模式绑定的变量(如果有)将在
let
的范围内绑定。如果失败,就会出现异常。
因此对于
let () = something
,您有一个不绑定变量且永远不会失败的模式(因为类型 unit
的表达式永远不会产生 ()
以外的值)。所以这在功能上确实是等价的let _:unit = ...
,只是更紧凑了一点。