如何阅读此OCaml类型签名?

时间:2010-07-13 23:46:04

标签: gtk ocaml type-signature lablgtk

我目前正在尝试一起使用OCaml和GTK(使用lablgtk绑定)。但是,文档不是最好的,虽然我可以弄清楚如何使用大多数功能,但我仍然坚持改变笔记本页面(切换到不同的选项卡)。

我找到the function that I need to use,但我不知道 如何使用它。该文档似乎表明它位于GtkPackProps.Notebook的子模块中,但我不知道如何调用它。

此外,此功能的类型签名与我之前看到的不同。

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

我认为它返回GtkSignal.t,但我不知道如何将第一个参数传递给函数(括号中的整个部分)。

有没有人有一些示例代码显示如何更改笔记本页面,或者可以给我一些如何做到这一点的提示?

2 个答案:

答案 0 :(得分:5)

你已经找到了一个多态变体; ,它们在4.2节的手册中有描述,而输入规则总是让我失望。我相信签名所说的是函数switch_page期望作为参数a GtkSignal.t,这是一个由两种类型参数化的抽象:

  • 第一个类型参数

    [> `notebook]
    

    包含notebook的任何多态变体作为值(这是大于均值的含义)。

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

如果我正确阅读GtkSignal.t的文档,那么它根本不是一个功能;这是一个有三个领域的记录:

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

我希望这会有所帮助。如果您遇到更多问题,请参阅本手册第4.2节中关于多态变体的内容。

答案 1 :(得分:5)

你发现的不是功能,而是信号。您在其类型中看到的函数类型是在页面切换发生时将调用的回调类型,但不会导致它。

顺便将switch_page的类型读作:由笔记本GtkSignal.t引发的信号([> `notebook ]),其回调类型为Gpointer.boxed option -> int -> unit

一般来说,使用lablgtk,你最好远离Gtk *低级模块,并使用tge G [A-Z]更高级别的模块。那些模块API看起来像C Gtk,我总是使用主要的Gtk文档来帮助自己。

在您的情况下,您想要使用GPack.notebook对象及其goto_page方法。