Como faço para ler este OCaml tipo de assinatura?
-
15-09-2020 - |
Pergunta
Atualmente estou experimentando com o uso de OCaml e GTK juntos (usando o lablgtk enlaces).No entanto, a documentação não é o melhor, e embora eu possa descobrir como usar a maioria dos recursos, eu estou preso com a mudança de notebook páginas (para mudar para outro separador).
Eu encontrei a função que eu preciso para usar, mas eu não sei como para usá-lo.A documentação parece sugerir que ele esteja em um sub-módulo de GtkPackProps.Notebook
, mas eu não sei como chamar isso.
Além disso, esta função tem um tipo de assinatura diferente de qualquer outro que eu tenha visto antes.
val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
Eu acho que ele retorna um GtkSignal.t
, mas eu não tenho nenhuma idéia de como passar o primeiro parâmetro para a função (toda a parte entre parênteses).
Alguém tem algum exemplo de código mostrando como alterar o notebook página, ou talvez possa me dar algumas dicas de como fazer isso?
Solução
O que você encontrou não é uma função, mas o sinal.O tipo funcional que você vê no seu tipo é o tipo de callback que será chamada quando a página do interruptor de acontecer, mas não causá-lo.
pela maneira como o tipo de switch_page é lido como:um sinal (GtkSignal.t
) gerado pelo notebook [> `notebook ]
, cujos retornos de chamada têm o tipo Gpointer.boxed option -> int -> unit
Geralmente falando, com lablgtk, é melhor você ficar longe do Gtk* baixo nível de módulos, e usar tge G[A-Z] maior nível de módulo.Aqueles API do módulo do olhar, como o C Gtk, e eu uso sempre o principal Gtk doc para me ajudar.
No seu caso você queira usar o GPack.caderno de objeto e seus goto_page método.
Outras dicas
Você encontrou um variante polimórfica; eles estão descritos no manual, na Seção 4.2, e a escrever as regras de sempre quebrar minha cabeça.Eu acredito que a assinatura diz é que a função switch_page
espera como argumento um GtkSignal.t
, que é uma abstração parametrizada por dois tipos:
O primeiro tipo de parâmetro,
[> `notebook]
inclui como valores de qualquer variante polimórfica incluindo
notebook
(que é o que a maior-que significa).O segundo tipo de parâmetro é uma função comum.
Se eu estou lendo a documentação para GtkSignal.t
corretamente, ele não é uma função;é um registro com três campos:
name
é uma seqüência de caracteres.classe
é uma variante polimórfica que poderia ser `bloco de notas` ou algo mais.marshaller
é um empacotador para o tipo de funçãoGpointer.boxed option -> int -> unit
.
Espero que isso ajude.Se você tem mais dificuldade, seção 4.2 do manual, em variantes polimórficas, podem classificar para fora.