如何读取这个 OCaml 类型签名?
-
15-09-2020 - |
题
我目前正在尝试一起使用 OCaml 和 GTK(使用 实验室 绑定)。然而,该文档并不是最好的,虽然我可以弄清楚如何使用大多数功能,但我仍坚持更改笔记本页面(切换到不同的选项卡)。
我已经发现 我需要使用的功能, ,但我不知道 如何 使用它。该文档似乎表明它位于 GtkPackProps.Notebook
, ,但我不知道如何称呼它。
此外,这个函数的类型签名与我之前见过的任何类型签名都不同。
val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
我认为它返回一个 GtkSignal.t
, ,但我不知道如何将第一个参数传递给函数(括号中的整个部分)。
有没有人有一些示例代码显示如何更改笔记本页面,或者可以给我一些关于如何执行此操作的提示?
解决方案
你发现的不是函数而是信号。您在其类型中看到的函数类型是页面切换发生时将调用的回调类型,但不会导致页面切换。
顺便说一句, switch_page 的类型读作:一个信号(GtkSignal.t
)由笔记本提出 [> `notebook ]
, ,其回调具有类型 Gpointer.boxed option -> int -> unit
一般来说,使用lablgtk,你最好远离Gtk*低级模块,而使用tge G[A-Z]更高级模块。这些模块 API 看起来像 C Gtk 的 API,我总是使用主要的 Gtk 文档来帮助自己。
在您的情况下,您想使用 GPack.notebook 对象及其 goto_page 方法。
其他提示
你已经找到了一个 多态性变体; 它们在手册第 4.2 节中进行了描述,而打字规则总是让我头疼。我相信签名所说的是该函数 switch_page
期望作为参数 a GtkSignal.t
, ,这是由两种类型参数化的抽象:
第一个类型参数,
[> `notebook]
包括任何多态变体作为值,包括
notebook
(这就是大于的意思)。第二个类型参数是普通函数。
如果我正在阅读文档 GtkSignal.t
正确地说,它根本不是一个函数;这是一个包含三个字段的记录:
name
是一个字符串。classe
是一个多态变体,可以是“笔记本”或其他东西。marshaller
是函数类型的编组器Gpointer.boxed option -> int -> unit
.
我希望这有帮助。如果您遇到更多麻烦,手册中有关多态变体的 4.2 节可能会帮您解决。