【问题标题】:How do I read this OCaml type signature?如何阅读此 OCaml 类型签名?
【发布时间】:2010-07-13 23:46:04
【问题描述】:

我目前正在尝试同时使用 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,但我不知道如何将第一个参数传递给函数(括号中的整个部分)。

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

【问题讨论】:

    标签: gtk ocaml type-signature lablgtk


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 据我所知,GPack.notebook 没有任何 goto_page 方法(wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk/html/…
    • 对不起,我只是正确地重新阅读了你的答案,你是对的 - GPack.notebook 确实有一个goto_page 方法 - 我会尝试使用它(使用正确的文档肯定会有很大帮助:)
    【解决方案2】:

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

    • 第一个类型参数,

      [> `notebook]
      

      包含任何多态变体的值,包括notebook(这就是大于的意思)。

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

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

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

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

    【讨论】:

    • 谢谢,这有点帮助 - 至少我现在知道从哪里开始。
    • 关于如何调用此函数的任何建议 - 应该是 source_notebook#S#switch_page,还是 GPack.notebook.S#switch_page 或其他方式?
    • 这不是函数,而是GtkPackProps.Notebook.S.switch_page# 用于方法,. 用于模块字段(函数或值))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多