2010-07-13 103 views
4

我目前正在嘗試使用OCaml和GTK(使用lablgtk綁定)。但是,文檔並不是最好的,雖然我可以研究如何使用大多數功能,但我堅持改變筆記本頁面(切換到不同的選項卡)。如何讀取此OCaml類型簽名?

我找到了the function that I need to use,但我不知道如何使用它。該文檔似乎暗示它位於GtkPackProps.Notebook的子模塊中,但我不知道如何調用此模塊。

另外,這個函數的類型簽名與我之前見過的不同。

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

我認爲它返回一個GtkSignal.t,但我不知道如何傳遞的第一個參數的函數(括號中的整個部分)。

有沒有人有一些示例代碼顯示如何更改筆記本頁面,或者可以給我一些關於如何做到這一點的提示?

回答

5

你發現的不是函數,而是信號。您在其類型中看到的功能類型是在頁面切換髮生時將被調用的回調類型,但不會導致它。

通過switch_page類型讀作方式:通過筆記本[> `notebook ],其回調有型Gpointer.boxed option -> int -> unit

普遍提高的信號(GtkSignal.t)說,與lablgtk,你最好躲得遠遠的的GTK *低級別模塊,並使用tge G [AZ]高級模塊。這些模塊API看起來像C Gtk,我總是使用主要的Gtk文檔來幫助自己。

在你的情況下,你想使用GPack.notebook對象和它的goto_page方法。

+0

據我所見,'GPack。筆記本電腦'沒有任何goto_page方法(http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk/html/GtkPackProps.Notebook.html) – 2010-07-14 23:12:20

+0

對不起,我剛剛重新正確地重讀你的答案,並且你是對的 - GPack.notebook *有* goto_page'方法 - 我會嘗試使用它(使用正確的文檔肯定會幫助很多:) – 2010-07-14 23:14:11

5

您已經發現了多態性變體;他們在第4.2節的手冊中進行了描述,並且打字規則總是讓我頭痛不已。我相信簽名說的是,該功能switch_page預計參數作爲一個GtkSignal.t,它是由兩種類型的參數化的抽象:

  • 第一種類型的參數,

    [> `notebook] 
    

    包括作爲值的任何多態性包括notebook(這就是大於平均值)的變體。

  • 第二個類型參數是一個普通函數。

如果我正確閱讀GtkSignal.t的文檔,它根本不是函數;它是有三個字段的記錄:

  • name是一個字符串。
  • classe是一個多態變體,可以是「筆記本」或別的東西。
  • marshaller是函數類型Gpointer.boxed option -> int -> unit的編組器。

我希望這有助於。如果您遇到更多麻煩,本手冊的第4.2節關於多態變體可能會將您排除在外。

+0

謝謝,這有點幫助 - 至少我知道從哪裏開始看現在。 – 2010-07-14 02:17:15

+0

任何關於如何去調用這個函數的建議 - 它應該是'source_notebook#S#switch_page',或者''也許''GPack.notebook.S#switch_page'或者其他方式? – 2010-07-14 02:27:41

+1

這不是一個函數,但是它是'GtkPackProps.Notebook.S.switch_page'('#'用於方法,'.'用於模塊字段(函數或值)) – 2010-07-14 10:52:31