Gtk 如何读取此OCaml类型签名?

Gtk 如何读取此OCaml类型签名?,gtk,ocaml,type-signature,lablgtk,Gtk,Ocaml,Type Signature,Lablgtk,我目前正在试验一起使用OCaml和GTK(使用绑定)。然而,文档并不是最好的,虽然我可以解决如何使用大多数功能,但我仍然需要更改笔记本页面(切换到其他选项卡) 我找到了,但我不知道如何使用它。文档似乎表明它位于的子模块中,但我不知道如何称呼它 此外,这个函数的类型签名与我以前见过的任何函数都不同 val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t 我认为它返

我目前正在试验一起使用OCaml和GTK(使用绑定)。然而,文档并不是最好的,虽然我可以解决如何使用大多数功能,但我仍然需要更改笔记本页面(切换到其他选项卡)

我找到了,但我不知道如何使用它。文档似乎表明它位于的子模块中,但我不知道如何称呼它

此外,这个函数的类型签名与我以前见过的任何函数都不同

 val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
我认为它返回一个,但我不知道如何将第一个参数传递给函数(括号中的整个部分)


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

您发现了一个多态变体手册第4.2节对它们进行了描述,打字规则总是让我头疼。我相信签名所说的是,函数
switch\u page
期望作为参数a
GtkSignal.t
,它是由两种类型参数化的抽象:

  • 第一个类型参数

    [> `notebook]
    
    包括所有多态变量作为值,包括
    笔记本
    (这就是大于的含义)

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

如果我正确阅读了
GtkSignal.t
的文档,那么它根本不是一个函数;这是一个包含三个字段的记录:

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

我希望这有帮助。如果您遇到更多问题,本手册关于多态变体的第4.2节可能会帮您解决。

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

顺便说一下,switch_页面的类型被理解为:由notebook
[>`notebook]
引发的信号(
GtkSignal.t
),其回调具有type
Gpointer.boxed option->int->unit

一般来说,使用lablgtk时,最好不要使用Gtk*低级模块,而使用tge G[A-Z]高级模块。这些模块API看起来像C Gtk,我总是使用主Gtk文档来帮助自己


在您的情况下,您希望使用GPack.notebook对象及其转到页面方法。

谢谢,这有点帮助-至少我现在知道从哪里开始查找。关于如何调用此函数的任何建议-它应该是
source#notebook#S#switch#u page
,或者可能是
GPack.notebook.S#switch#u page
或其他方式?这不是一个函数,但它是
GtkPackProps.notebook.S.switch#u page
表示方法,
表示模块字段(函数或值)),就我所见,
GPack.notebook
没有任何转到页面方法()对不起,我只是正确地重读了你的答案,你是对的-GPack.notebook确实有一个
goto_page
方法-我将尝试使用它(使用正确的文档肯定会有很大帮助:)