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 wrapper
funkcja jest niezależna od wrappee
podpisu funkcji; tzn. nie wie nic o liczbie, pozycjach, nazwach itp. wrappee
argumentów; po prostu przekazuje wszystkie swoje argumenty wrappee
, tak jakby wrappee
był pierwotnie nazywany. (Nie ma jednak potrzeby mieszania się ze stosem wywołań w celu zastąpienia połączenia wrapper
wywoł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 *args
oznacza „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.
advice
wystarczają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ą ...
interactive
specyfikację.