Как мне прочитать эту подпись типа OCaml?
-
15-09-2020 - |
Вопрос
В настоящее время я экспериментирую с совместным использованием OCaml и GTK (используя лаблгтк привязки).Однако документация не самая лучшая, и хотя я могу понять, как использовать большинство функций, мне приходится менять страницы блокнота (переключаться на другую вкладку).
я нашел функция, которую мне нужно использовать, но я не знаю как чтобы использовать его.Документация, кажется, предполагает, что она находится в подмодуле GtkPackProps.Notebook
, но я не знаю, как это назвать.
Кроме того, эта функция имеет сигнатуру типа, отличную от всех, которые я видел раньше.
val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
Я думаю, что он возвращает GtkSignal.t
, но я понятия не имею, как передать в функцию первый параметр (вся часть в скобках).
Есть ли у кого-нибудь пример кода, показывающий, как изменить страницу блокнота, или может дать мне несколько советов, как это сделать?
Решение
Что вы нашли, не функция, а сигнал.Функциональный тип, который вы видите в своем типе, это тип обратного вызова, который будет вызываться, когда выключатель страницы произойдет, но не приведет к этому.
Кстати, тип Switch_Page читается как: сигнал (GtkSignal.t
), поднятый ноутбуком [> `notebook ]
, чей обратные вызовы имеют тип Gpointer.boxed option -> int -> unit
Вообще говоря, с Lablgtk, вам лучше оставаться в подальше модулей GTK * низкого уровня, а также использовать модуль более высокого уровня уровня G [A-Z].Эти модуль API выглядят как C GTK One, и я всегда использую основной документ GTK, чтобы помочь себе.
В вашем случае вы хотите использовать объект gpack.notebook и его метод goto_page.
Другие советы
Вы нашли полиморфный вариант; они описаны в руководстве в разделе 4.2, и правила набора текста всегда ломают мне голову.Я считаю, что подпись говорит о том, что функция switch_page
ожидает в качестве аргумента GtkSignal.t
, который представляет собой абстракцию, параметризованную двумя типами:
Первый параметр типа,
[> `notebook]
включает в качестве значений любой полиморфный вариант, включая
notebook
(вот что означает «больше»).Параметр второго типа — обычная функция.
Если я читаю документацию для GtkSignal.t
правильно, это вообще не функция;это запись с тремя полями:
name
это строка.classe
— это полиморфный вариант, который может быть «блокнотом» или чем-то еще.marshaller
является маршалером для типа функцииGpointer.boxed option -> int -> unit
.
Надеюсь, это поможет.Если у вас возникнут дополнительные проблемы, раздел 4.2 руководства, посвященный полиморфным вариантам, может вас решить.