我在Yacfe 示例中看到了以下函数调用:
Visitor_c.vk_program { Visitor_c.default_visitor_c with
Visitor_c.kexpr = (fun (k, bigf) exp ->
match Ast_c.unwrap_expr exp with
| Binary(e1, Logical (Eq), (((Constant(Int("0")) as _e2),_t),ii)) ->
(match Ast_c.get_onlytype_expr e1 with
| Some (qu, (Pointer _,_ii)) ->
let idzero = Common.tuple_of_list1 ii in
idzero.cocci_tag :=
Ast_cocci.MINUS (Ast_cocci.NoPos, [[null_addon]]), [];
| _ -> k exp
)
| _ -> k exp
);
} ast;
我可以看到一个函数调用,记录初始化为第一个参数,ast
第二个参数。
我不熟悉的是表单的语法:
{Visitor_c.default_visitor_c with Visitor_c.kexpr = some_value;}
这是什么意思?我知道一个记录可以初始化为{name=value;name=value;...}
,但我不熟悉{X with name=value}
,你能告诉我它是什么意思吗?
除了以下内容,我在Ocaml 手册中找不到任何关于合法记录值初始化的内容:
6.2.3 记录
记录值是标记的值元组。写入的记录值 { field1 = v1; ……;fieldn = vn } 将值 vi 与记录字段 fieldi 相关联,因为 i = 1 … n。当前实现支持多达 222 - 1 个字段(4194303 个字段)的记录。
如果在您的回答中包含对 OCaml 手册中相关部分的参考,我会很高兴。