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;
最初の引数と 2 番目の引数としてレコードが初期化された関数呼び出しを確認でき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 } は、i = 1 … n の場合、値 vi をレコード フィールド fieldi に関連付けます。現在の実装では、最大 222 − 1 フィールド (4194303 フィールド) のレコードがサポートされています。
OCamlマニュアルの関連セクションへの参照を回答に含めていただければ幸いです。