如何阅读此OCaml类型签名?

a_m*_*m0d 4 gtk ocaml type-signature lablgtk

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

我找到了我需要使用的功能,但我不知道如何使用它.文档似乎暗示它是在子模块中GtkPackProps.Notebook,但我不知道如何调用它.

此外,此功能的类型特征与我之前看到的不同.

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

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

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

Nor*_*sey 5

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

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

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

我希望这有帮助.如果您遇到更多麻烦,本手册第4.2节中的多态变体可能会让您感到厌烦.


Rém*_*émi 5

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

顺便说一下switch_page的类型如下:一个GtkSignal.t由笔记本引发的信号() [> `notebook ],其回调类型Gpointer.boxed option -> int -> unit

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

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