繁体   English   中英

() -> 在 ocaml 中是什么意思?

[英]What does () -> mean in ocaml?

我在看这段代码(前两行是上下文的伪代码)

typ = Void | Bool | Int
type bind = typ * string 

let check_binds (kind : string) (binds : bind list) =
    List.iter (function
    (Void, b) -> raise (Failure ("illegal void " ^ kind ^ " " ^ b))
      | _ -> ()) binds;

所以我认为正在发生的是有一个称为绑定的列表,并且由于 iter,在“List.iter”之后括号内定义的 function 被应用于绑定中的每个项目。

但是我对 function 本身感到困惑。 这是我尝试单独写出 function

function 
(Void, b) -> raise (Failure ("illegal void " ^ kind ^ " " ^ b)
| _ -> ()

_ -> () 是什么意思?

这是使用带有 2 个子句的模式匹配的匿名 function 定义:

  • 第一个覆盖案例(Void, b)
  • 第二个涵盖“其他所有内容”:模式匹配中的_是一个匹配任何内容的包罗万象的分支。

当此分支在您的代码段中匹配时, function 将仅返回() - 这是unit类型的唯一可能值。

所以这个 lambda function 是一种验证器,如果你有一个错误类型的值(由任何东西参数化的 Void)会引发错误,而在其他情况下什么也不做(返回一个单位)。 老实说,这看起来像是一种试图减轻次优类型设计的黑客行为——我很确定我们可以做得更好,并使(Void, b)无法表示 state (但这与所要求的正交)......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM