Ja, das kannst du benutzen byte-defop-compiler
von eine Funktion angeben, die Ihre Funktion kompiliert. Es byte-defop-compiler
sind einige nützliche Funktionen integriert, mit denen Sie festlegen können, dass Ihre Funktionen basierend auf einer Reihe von Argumenten Warnungen ausgeben sollen.
Dokumentation
Fügen Sie eine Compiler-Form für FUNCTION hinzu. Wenn function ein Symbol ist, muss die Variable "byte-SYMBOL" den zu verwendenden Opcode benennen. Wenn function eine Liste ist, ist das erste Element die Funktion und das zweite Element das Bytecode-Symbol. Das zweite Element kann null sein, was bedeutet, dass es keinen Opcode gibt. COMPILE-HANDLER ist die Funktion, die zum Kompilieren dieses Byte-Ops verwendet wird, oder kann die Abkürzungen 0, 1, 2, 3, 0-1 oder 1-2 haben. Wenn es Null ist, dann ist der Handler "Byte-Compile-SYMBOL".
Verwendung
In Ihrem speziellen Fall können Sie eine der Abkürzungen verwenden, um zu definieren, dass Ihre Funktion zwei Argumente erhalten soll.
(byte-defop-compiler my-caller 2)
Jetzt gibt Ihre Funktion Warnungen aus, wenn sie mit etwas anderem als 2 Argumenten kompiliert wird.
Wenn Sie spezifischere Warnungen geben und Ihre eigenen Compilerfunktionen schreiben möchten. Schauen Sie sich byte-compile-one-arg
und andere ähnliche Funktionen in bytecomp.el als Referenz an.
Beachten Sie, dass Sie nicht nur eine Funktion für die Validierung angeben, sondern auch das Kompilieren. Wieder Kompilierungsfunktionen in bytecomp.el bieten Ihnen eine gute Referenz.
Sicherere Routen
Dies ist nicht etwas, was ich online dokumentiert oder diskutiert habe, aber insgesamt würde ich sagen, dass dies ein schlechter Weg ist. Der richtige Weg (IMO) wäre, Ihre Defuns mit beschreibenden Signaturen zu schreiben oder ein Makro zu verwenden, das zur Expansionszeit Warnungen ausgibt, die Länge Ihrer Argumente überprüft und mit byte-compile-warn
oder error
Fehler anzeigt . Es kann auch von Vorteil sein, wenn Sie davon Gebrauch macheneval-when-compile
, Fehlerprüfungen durchzuführen.
Sie müssen auch Ihre Funktion definieren, bevor sie jemals verwendet wird, und den Aufruf an byte-defop-compiler
muss erfolgen, bevor der Compiler zu den tatsächlichen Aufrufen Ihrer Funktion gelangt.
Auch hier scheint es nicht wirklich dokumentiert oder empfohlen zu sein, was ich gesehen habe (könnte falsch sein), aber ich stelle mir vor, dass das hier zu befolgende Muster darin besteht, eine Art Header-Datei für Ihr Paket anzugeben, die voll von leeren Defuns ist und ruft an byte-defop-compiler
. Dies wäre im Grunde ein Paket, das benötigt wird, bevor Ihr echtes Paket kompiliert werden kann.
Meinung: Aufgrund meines Wissens, das nicht viel ist, weil ich gerade von all dem erfahren habe, würde ich Ihnen raten, nichts davon zu tun. je