Как мне прочитать эту подпись типа OCaml? - PullRequest
4 голосов
/ 14 июля 2010

В настоящее время я экспериментирую с использованием OCaml и GTK вместе (используя привязки lablgtk ).Однако документация не самая лучшая, и, хотя я могу понять, как использовать большинство функций, я застрял на смене страниц записной книжки (переход на другую вкладку).

Я нашел функция, которую мне нужно использовать , но я не знаю как использовать ее.Документация предполагает, что она находится в подмодуле GtkPackProps.Notebook, но я не знаю, как это вызвать.

Кроме того, эта функция имеет сигнатуру другого типак любому, что я видел раньше.

 val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t

Я думаю, что он возвращает GtkSignal.t, но я не знаю, как передать первый параметр в функцию (всю часть вскобки).

Кто-нибудь получил пример кода, показывающего, как изменить страницу записной книжки, или может дать мне несколько советов, как это сделать?

Ответы [ 2 ]

5 голосов
/ 14 июля 2010

То, что вы нашли, это не функция, а сигнал.Функциональный тип, который вы видите в его типе, является типом обратного вызова, который будет вызываться при переключении страницы, но не будет вызывать его.

в зависимости от того, как тип switch_page читается как: сигнал(GtkSignal.t) поднял ноутбук [> `notebook ], чьи обратные вызовы имеют тип Gpointer.boxed option -> int -> unit

Вообще говоря, с lablgtk вам лучше держаться подальше от модулей низкого уровня Gtk * и использовать tge G [AZ] модуль более высокого уровня.Эти API модуля похожи на C Gtk, и я всегда использую основной документ Gtk, чтобы помочь себе.

В вашем случае вы хотите использовать объект GPack.notebook и его метод goto_page.

5 голосов
/ 14 июля 2010

Вы нашли полиморфный вариант; они описаны в руководстве в Разделе 4.2, и правила ввода всегда ломают мне голову. Я считаю, что подпись говорит о том, что функция switch_page ожидает в качестве аргумента GtkSignal.t, который является абстракцией, параметризованной двумя типами:

  • Первый тип параметра,

    [> `notebook]
    

    включает в качестве значений любой полиморфный вариант, включая notebook (вот что означает «больше чем»).

  • Второй тип параметра является обычной функцией.

Если я правильно читаю документацию для GtkSignal.t, это вообще не функция; это запись с тремя полями:

  • name - это строка.
  • classe - это полиморфный вариант, который может быть «записной книжкой» или чем-то еще.
  • marshaller - маршаллер для типа функции Gpointer.boxed option -> int -> unit.

Надеюсь, это поможет. Если у вас возникли дополнительные проблемы, раздел 4.2 этого руководства, посвященный полиморфным вариантам, может помочь вам разобраться.

...