j'ai vu l'appel de fonction suivante dans Yacfe example:{X} avec la valeur en OCaml
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;
Je peux voir un appel de fonction avec enregistrement initialisé comme premier argument, et ast
comme second argument.
Ce que je ne suis pas familier avec la syntaxe de la forme:
{Visitor_c.default_visitor_c with Visitor_c.kexpr = some_value;}
Qu'est-ce que cela signifie? Je sais qu'un enregistrement peut être initialisé comme {name=value;name=value;...}
, mais je ne connais pas le {X with name=value}
, pouvez-vous me dire ce que cela signifie?
Je ne trouve pas dans le Ocaml Manual rien sur l'initialisation de la valeur d'enregistrement juridique autre que les éléments suivants:
enregistrements
6.2.3valeurs d'enregistrement sont marqués tuples de valeurs. La valeur d'enregistrement écrite { field1 = v1; ...; fieldn = vn} associe la valeur vi à l'enregistrement champ fieldi, pour i = 1 ... n. L'implémentation actuelle prend en charge enregistrements avec jusqu'à 222 - 1 champs (champs 4194303).
Je serais heureux que dans votre réponse, vous incluiez une référence à la section appropriée dans le manuel d'OCaml.
Merci. Comment pourrais-je google cela? C'est assez profond dans le manuel, et je ne pouvais pas le trouver facilement. –
Je ne sais pas comment vous le feriez google. Je viens juste de le savoir. Mais en haut de cette page (section 6.7) liste la grammaire de toutes les expressions qui sont valides dans OCaml, donc si vous voulez comprendre une expression, vous pouvez commencer par là, et si vous la voyez, faites défiler la partie appropriée qui la décrit. En général, le chapitre 6 traite de divers aspects de la grammaire du langage OCaml; Il y a des sections qui traitent des expressions de type, des modèles, des classes, des modules, etc. Donc, si vous avez besoin de chercher quelque chose, je commencerais par la section appropriée. – newacct
Wow, je ne savais pas que vous pouviez garder la liste 'fieldn = expern; Merci! –