Как мне прочитать эту подпись типа OCaml?
В настоящее время я экспериментирую с использованием OCaml и GTK вместе (используя привязки lablgtk). Однако документация не самая лучшая, и, хотя я могу понять, как использовать большинство функций, я застрял на смене страниц записной книжки (переход на другую вкладку).
Я нашел функцию, которую мне нужно использовать, но я не знаю, как ее использовать. Документация, кажется, предполагает, что она находится в подмодуле GtkPackProps.Notebook
но я не знаю как это назвать.
Кроме того, эта функция имеет сигнатуру типа, отличную от любой, которую я видел раньше.
val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
Я думаю, что это возвращает GtkSignal.t
, но я понятия не имею, как передать первый параметр функции (целая часть в скобках).
Кто-нибудь получил пример кода, показывающего, как изменить страницу записной книжки, или может дать мне несколько советов, как это сделать?
2 ответа
То, что вы нашли, это не функция, а сигнал. Функциональный тип, который вы видите в его типе, является типом обратного вызова, который будет вызываться при переключении страницы, но не будет вызывать его.
кстати тип switch_page читается как: сигнал (GtkSignal.t
) поднятый блокнотом [> `notebook ]
чьи обратные вызовы имеют тип Gpointer.boxed option -> int -> unit
Вообще говоря, с lablgtk вам лучше держаться подальше от модулей низкого уровня Gtk* и использовать модуль высокого уровня tge G[AZ]. Эти API модуля похожи на C Gtk, и я всегда использую основной документ 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 руководства, посвященный полиморфным вариантам, может помочь вам.