Wie lese ich diese OCaml-Signatur?
-
15-09-2020 - |
Frage
Ich experimentiere derzeit mit der Verwendung von OCaml und GTK zusammen (mit dem lablgtk verbindlich).Die Dokumentation ist jedoch nicht die beste, und obwohl ich herausfinden kann, wie die meisten Funktionen verwendet werden, muss ich die Notizbuchseiten nicht ändern (zu einer anderen Registerkarte wechseln).
Ich habe gefunden die Funktion, die ich verwenden muss, aber ich weiß es nicht wie um es zu benutzen.Die Dokumentation scheint darauf hinzudeuten, dass es sich in einem Untermodul von befindet GtkPackProps.Notebook
, aber ich weiß nicht, wie ich das nennen soll.
Außerdem hat diese Funktion eine andere Typensignatur als jede, die ich zuvor gesehen habe.
val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t
Ich denke, es gibt a zurück GtkSignal.t
, aber ich habe keine Ahnung, wie ich den ersten Parameter an die Funktion übergeben soll (den ganzen Teil in Klammern).
Hat jemand einen Beispielcode, der zeigt, wie man die Notizbuchseite ändert, oder kann er mir vielleicht ein paar Tipps dazu geben?
Lösung
Was Sie gefunden haben, ist keine Funktion, sondern das Signal.Der Funktionstyp, den Sie in seinem Typ sehen, ist der Typ des Rückrufs, der beim Seitenwechsel aufgerufen wird, ihn aber nicht verursacht.
übrigens wird der Typ von switch_page gelesen als:Signal (GtkSignal.t
) von Notebook angehoben [> `notebook ]
, deren Rückrufe den Typ haben Gpointer.boxed option -> int -> unit
Im Allgemeinen sollten Sie sich bei lablgtk besser von den Gtk * -Low-Level-Modulen fernhalten und das Higher-Level-Modul tge G [Az] verwenden.Diese Modul-API sieht aus wie die C-Gtk-API, und ich benutze immer das Haupt-Gtk-Dokument, um mir selbst zu helfen.
In Ihrem Fall möchten Sie das GPack verwenden.notebook-Objekt und seine goto_page-Methode.
Andere Tipps
Sie haben eine gefunden polymorphe Variante; sie sind im Handbuch in Abschnitt 4.2 beschrieben, und die Tippregeln brechen mir immer den Kopf.Ich glaube, was die Signatur sagt, ist, dass die Funktion switch_page
erwartet als Argument a GtkSignal.t
, was eine Abstraktion ist, die durch zwei Typen parametrisiert wird:
Der erste Typparameter,
[> `notebook]
schließt als Werte jede polymorphe Variante ein, einschließlich
notebook
(das ist, was das größer-als bedeutet).Der zweite Typparameter ist eine gewöhnliche Funktion.
Wenn ich die Dokumentation für lese GtkSignal.t
richtig, es ist überhaupt keine Funktion;es ist ein Rekord mit drei Feldern:
name
ist ein String.classe
ist eine polymorphe Variante, die `Notizbuch" oder etwas anderes sein könnte.marshaller
ist ein Marshaller für den FunktionstypGpointer.boxed option -> int -> unit
.
Ich hoffe, das hilft.Wenn Sie mehr Probleme haben, könnte Abschnitt 4.2 des Handbuchs über polymorphe Varianten Sie aussortieren.