2010-07-13 90 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类型读作方式:通过笔记本[> `notebook ],其回调有型Gpointer.boxed option -> int -> unit

普遍提高的信号(GtkSignal.t)说,与lablgtk,你最好躲得远远的的GTK *低级别模块,并使用tge G [AZ]高级模块。这些模块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) – 2010-07-14 23:12:20

+0

对不起,我刚刚重新正确地重读你的答案,并且你是对的 - GPack.notebook *有* goto_page'方法 - 我会尝试使用它(使用正确的文档肯定会帮助很多:) – 2010-07-14 23:14:11

5

您已经发现了多态性变体;他们在第4.2节的手册中进行了描述,并且打字规则总是让我头痛不已。我相信签名说的是,该功能switch_page预计参数作为一个GtkSignal.t,它是由两种类型的参数化的抽象:

  • 第一种类型的参数,

    [> `notebook] 
    

    包括作为值的任何多态性包括notebook(这就是大于平均值)的变体。

  • 第二个类型参数是一个普通函数。

如果我正确阅读GtkSignal.t的文档,它根本不是函数;它是有三个字段的记录:

  • name是一个字符串。
  • classe是一个多态变体,可以是“笔记本”或别的东西。
  • marshaller是函数类型Gpointer.boxed option -> int -> unit的编组器。

我希望这有助于。如果您遇到更多麻烦,本手册的第4.2节关于多态变体可能会将您排除在外。

+0

谢谢,这有点帮助 - 至少我知道从哪里开始看现在。 – 2010-07-14 02:17:15

+0

任何关于如何去调用这个函数的建议 - 它应该是'source_notebook#S#switch_page',或者''也许''GPack.notebook.S#switch_page'或者其他方式? – 2010-07-14 02:27:41

+1

这不是一个函数,但是它是'GtkPackProps.Notebook.S.switch_page'('#'用于方法,'.'用于模块字段(函数或值)) – 2010-07-14 10:52:31