To, co rozumiem przez „przezroczyste” przekazujące „opakowanie funkcji”, to funkcja, nazwijmy ją wrapper, która zwraca wynik z przekazania całego argumentu do innej funkcji, nazwijmy ją wrappee.
Jak to się robi w Emacs Lisp?
Uwaga: Idealna wrapperfunkcja jest niezależna od wrappeepodpisu funkcji; tzn. nie wie nic o liczbie, pozycjach, nazwach itp. wrappeeargumentów; po prostu przekazuje wszystkie swoje argumenty wrappee, tak jakby wrappeebył pierwotnie nazywany. (Nie ma jednak potrzeby mieszania się ze stosem wywołań w celu zastąpienia połączenia wrapperwywołaniem do wrappee).
Zamieściłem częściową odpowiedź na moje pytanie:
(defun wrapper (&rest args) (apply 'wrappee args))
Działa to tylko wtedy, gdy niewrappee jest interaktywne. Najwyraźniej sposób, w jaki funkcje interaktywne pobierają argumenty, reprezentuje inny „kanał” niż to, co obejmuje zaklęcie. Co jeszcze trzeba zatem jest equally- -agnostic odpowiednikiem podpisu dla przypadku, gdy stanowi interaktywny funkcji.(&rest args)wrappee(&rest args)wrappee
(To pytanie było motywowane problemem opisanym w tym wcześniejszym pytaniu ).
Na wypadek, gdyby potrzebne było dalsze wyjaśnienie tego, o co proszę, poniżej znajduje się kilka przykładów pokazujących ekwiwalenty Pythona i JavaScript tego, czego szukam.
W Pythonie pokazano kilka standardowych sposobów implementacji takiego opakowania:
def wrapper(*args, **kwargs):
return wrappee(*args, **kwargs)
# or
wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs)
(Tutaj *argsoznacza „wszystkie argumenty pozycyjne” i **kwargs„wszystkie argumenty słów kluczowych”).
Odpowiednik JavaScript byłby mniej więcej taki:
function wrapper () { return wrappee.apply(this, arguments); }
// or
wrapper = function () { return wrappee.apply(this, arguments); }
Dla przypomnienia , nie zgadzam się, że to pytanie jest duplikatem Jak zastosować mapcar do funkcji z wieloma argumentami . Nie potrafię wyjaśnić, dlaczego, ponieważ te dwa pytania wyglądają tak wyraźnie dla mnie inaczej. To tak, jakby zapytano „wyjaśnij, dlaczego jabłko nie powinno być uważane za ekwiwalent pomarańczy”. Samo pytanie jest tak szalone, że można wątpić, czy można znaleźć odpowiedź, która zadowoli osobę zadającą pytanie.
advicewystarczająco problematyczne, więc wolałbym trzymać się z daleka. W rzeczywistości motywem do tego pytania było znalezienie rozwiązania nierozwiązywalnego problemu, który mam z zalecaną funkcją ...
interactivespecyfikację.