ho visto la seguente chiamata di funzione in Yacfe example:{X} con il valore in 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;
posso vedere una chiamata di funzione con il record inizializzato come primo argomento, e ast
come secondo argomento.
Quello che non sono a conoscenza è la sintassi della forma:
{Visitor_c.default_visitor_c with Visitor_c.kexpr = some_value;}
Che cosa significa questo? So che un record può essere inizializzato come {name=value;name=value;...}
, ma non ho familiarità con lo {X with name=value}
, puoi dirmi cosa significa?
non riesco a trovare nella Ocaml Manual nulla di inizializzazione del valore del record giuridica diversa da quella seguente:
tuple6.2.3 Records
valori record vengono etichettati di valori. Il valore del record scritto { field1 = v1; ...; fieldn = vn} associa il valore vi al record campo , per i = 1 ... n. L'implementazione corrente supporta i record con un massimo di 222 - 1 campi (4194303 campi).
Sarò felice se nella tua risposta includerai un riferimento alla sezione pertinente nel manuale OCaml.
Grazie. Come potrei fare su Google? È abbastanza profondo nel manuale, e non ho potuto trovarlo facilmente. –
Non so come lo faresti su Google. Mi è appena capitato di sapere questo. Ma in cima a quella pagina (sezione 6.7) elenca la grammatica di tutte le espressioni valide in OCaml, quindi se vuoi capire un'espressione puoi iniziare da lì per prima, e se la vedi scorrere verso il basso fino alla parte appropriata che la descrive. E in generale, il capitolo 6 tratta vari aspetti della grammatica della lingua OCaml; ci sono sezioni che trattano espressioni di tipi, modelli, classi, moduli, ecc. Quindi, se hai bisogno di cercare qualcosa, inizierei qui nella sezione appropriata. – newacct
Wow, non sapevo che avresti potuto elencare 'fieldn = expern;'. Grazie! –