[英]What does "let name(param1, param2) = .." mean in ocaml (as opposed to just let name = ...)?
[英]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.