Tak, możesz użyć byte-defop-compiler
do określenia funkcji, która kompiluje twoją funkcję, byte-defop-compiler
ma pewne wbudowane drobiazgi, które pomogą ci określić, że twoje funkcje powinny generować ostrzeżenia oparte na posiadaniu wielu argumentów.
Dokumentacja
Dodaj formularz kompilatora dla FUNKCJI. Jeśli funkcja jest symbolem, to zmienna „byte-SYMBOL” musi określać używany kod operacji. Jeśli funkcja jest listą, pierwszy element jest funkcją, a drugi element jest symbolem kodu bajtowego. Drugi element może być zerowy, co oznacza, że nie ma kodu operacji. COMPILE-HANDLER to funkcja używana do kompilacji tego bajtu-operacji, lub mogą to być skróty 0, 1, 2, 3, 0-1 lub 1-2. Jeśli jest zero, to program obsługi to „bajt-kompilacja-SYMBOL.
Stosowanie
W twoim konkretnym przypadku możesz użyć jednego ze skrótów, aby zdefiniować, że twoja funkcja powinna mieć dwa argumenty.
(byte-defop-compiler my-caller 2)
Teraz Twoja funkcja wyświetli ostrzeżenia, gdy zostanie skompilowana z czymkolwiek innym niż 2 argumenty.
Jeśli chcesz podać bardziej szczegółowe ostrzeżenia i napisać własne funkcje kompilatora. Sprawdź byte-compile-one-arg
i inne podobne funkcje w bytecomp.el w celach informacyjnych.
Zauważ, że nie tylko określasz jakąś funkcję do obsługi sprawdzania poprawności, ale tak naprawdę kompilację. Ponownie funkcje kompilacji w bytecomp.el zapewnią ci dobre referencje.
Bezpieczniejsze trasy
Nie jest to coś, co widziałem udokumentowane lub omówione online, ale ogólnie powiedziałbym, że jest to odradzana droga do wyboru. Prawidłowa trasa (IMO) polegałaby na napisaniu defuntu za pomocą podpisów opisowych lub użyciu makra, które zapewni ostrzeżenia w czasie ekspansji, sprawdzania długości argumentów i używania byte-compile-warn
lub error
pokazywania błędów. Korzystne może być również skorzystanie z funkcji eval-when-compile
sprawdzania błędów.
Będziesz także musiał zdefiniować swoją funkcję, zanim zostanie ona kiedykolwiek użyta, a wywołanie to byte-defop-compiler
będzie musiało nastąpić, zanim kompilator przejdzie do rzeczywistych wywołań twojej funkcji.
Ponownie wydaje się, że tak naprawdę nie zostało to udokumentowane ani wskazane na podstawie tego, co widziałem (może się mylić), ale wyobrażam sobie, że wzorzec, który należy zastosować tutaj, to określenie pewnego rodzaju pliku nagłówkowego dla twojego pakietu, który jest pełen wielu pustych odrzuceń i wzywa do byte-defop-compiler
. Zasadniczo byłby to pakiet wymagany przed skompilowaniem prawdziwego pakietu.
Opinia: Na podstawie tego, co wiem, co nie jest wiele, ponieważ właśnie się o tym wszystkim dowiedziałem, radziłbym wam nigdy tego nie robić. zawsze