Я видел следующий вызов функции в примере 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 Записи
Значения записи помечены как кортежи
ценности. Значение записи написано {
поле1 = v1; ...; fieldn = vn}
связывает значение vi с записью
поле, для i = 1… n.
текущая реализация поддерживает
записи до 222 - 1 полей
(4194303 поля).
Я буду рад, если в свой ответ вы включите ссылку на соответствующий раздел в руководстве OCaml.