2010-07-13 2 views
4

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

Я нашел the function that I need to use, но я не знаю , как использовать его. Документация, похоже, предполагает, что она находится в подмодуле GtkPackProps.Notebook, но я не знаю, как это назвать.

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

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

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

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

ответ

5

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

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

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

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

+0

Насколько я вижу,« GPack. у ноутбука нет метода goto_page (http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk/html/GtkPackProps.Notebook.html) –

+0

Извините, я просто перечитал ваш ответ правильно и вы правы - у GPack.notebook * есть * метод 'goto_page' - я попытаюсь использовать это вместо (использование правильной документации, безусловно, поможет много :) –

5

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

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

    [> `notebook] 
    

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

  • Второй тип - обычная функция.

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

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

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

+0

Спасибо, это немного помогает - по крайней мере, я знаю, с чего начать сейчас. –

+0

Любые советы о том, как я могу позвонить о вызове этой функции, должен ли он быть «source_notebook # S # switch_page' или, возможно,« GPack.notebook.S # switch_page' или каким-либо другим способом? –

+1

Это не функция, но это 'GtkPackProps.Notebook.S.switch_page' (' # 'для метода,'. 'Для поля модуля (функция или значение)) –

 Смежные вопросы

  • Нет связанных вопросов^_^