Ich sah den folgenden Funktionsaufruf in Beispiel 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;
Ich kann einen Funktionsaufruf sehen, bei dem record als erstes Argument initialisiert wird, und ast
als zweites Argument.
Was ich nicht kenne, ist die Syntax des Formulars:
{Visitor_c.default_visitor_c with Visitor_c.kexpr = some_value;}
Was bedeutet das? Ich weiß, dass ein Datensatz wie folgt initialisiert werden kann {name=value;name=value;...}
aber ich bin nicht vertraut mit dem {X with name=value}
Können Sie mir sagen, was das bedeutet?
Ich kann nicht finden in der Ocaml-Handbuch nichts über die legale Initialisierung von Datensätzen, außer dem Folgenden:
6.2.3 Aufzeichnungen
Datensatzwerte sind gekennzeichnete Tupel von Werten. Der Datensatzwert geschrieben { feld1 = v1; ; feldn = vn } assoziiert den Wert vi mit dem Datensatz feldi, für i = 1 n. Die aktuelle Implementierung unterstützt Datensätze mit bis zu 222 1 Feldern (4194303 Felder).
Ich würde mich freuen, wenn Sie in Ihrer Antwort einen Verweis auf den entsprechenden Abschnitt im OCaml-Handbuch angeben würden.