Come posso leggere questa firma di tipo OCAML?
-
15-09-2020 - |
Domanda
Attualmente sto sperimentando con l'uso di OCAML e GTK insieme (usando LablGTK Bindings). Tuttavia, la documentazione non è la migliore, e mentre posso risolvere come utilizzare la maggior parte delle funzionalità, sono bloccato con la modifica delle pagine del notebook (passando a una scheda diversa).
Ho trovato La funzione che devo usare , ma non conosco come per usarlo. La documentazione sembra suggerire di essere in un sottoclodulo di GtkPackProps.Notebook
, ma non so come chiamarlo.
Inoltre, questa funzione ha una firma di tipo diversa da qualsiasi ho visto prima.
val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
.
Penso che restituisca un GtkSignal.t
, ma non ho idea di come passare il primo parametro alla funzione (l'intera parte tra parentesi).
Qualcuno ha un codice di esempio mostrando come modificare la pagina del notebook o può forse darmi alcuni suggerimenti su come fare questo?
Soluzione
Quello che hai trovato non è una funzione ma il segnale.Il tipo funzionale che vedi nel suo tipo è il tipo di callback che verrà chiamato quando si verifica l'interruttore di pagina, ma non lo causerà.
Tramite il modo in cui il tipo di switch_page viene letto come: un segnale (GtkSignal.t
) sollevato da notebook [> `notebook ]
, le cui callback hanno digita Gpointer.boxed option -> int -> unit
In genere parlando, con lablgtk, è meglio stare lontano dai moduli GTK * a basso livello e utilizzare TGE G [A-Z] Modulo di livello superiore.Quelle API del modulo sembrano la C GTK, e io uso sempre il Doc GTK principale per aiutarmi.
Nel tuo caso si desidera utilizzare l'oggetto GPack.Notebook e il suo metodo goto_page.
Altri suggerimenti
Hai trovato una variante polimorfica ; sono descritti nel manuale nella sezione 4.2, e le regole di battitura mirano sempre la testa. Credo che cosa dice la firma è che la funzione switch_page
prevede come argomento un GtkSignal.t
, che è una astrazione parametrizzata da due tipi:
- .
-
Il primo parametro tipo,
.[> `notebook]
Include come valori qualsiasi variante polimorfica incluso
notebook
(è quello che è il più grande di mezzi). -
Il secondo parametro tipo è una funzione ordinaria.
Se sto leggendo la documentazione per GtkSignal.t
correttamente, non è affatto una funzione; È un record con tre campi:
- .
-
name
è una stringa. -
classe
è una variante polimorfica che potrebbe essere `` taccuino "o qualcos'altro. -
marshaller
è un marshaller per il tipo di funzioneGpointer.boxed option -> int -> unit
.
Spero che questo aiuti. Se hai più problemi, la sezione 4.2 del manuale, sulle varianti polimorfiche, potrebbe ordinarti.