Mam trochę kodu , flet
który tymczasowo zmienia zachowanie funkcji.
;; prevent changing the window
(flet ((pop-to-buffer (buffer &rest args)
(switch-to-buffer buffer)))
(compilation-next-error-function n reset))
Jednak kompilator bajtów Emacsa ostrzega:
In ag/next-error-function:
ag.el:103:7:Warning: `flet' is an obsolete macro (as of 24.3); use either
`cl-flet' or `cl-letf'.
Jednak cl-flet
działa inaczej i nie odpowiadał kilka przypadków użycia, i wierzę, że jest to jeden z tych przypadków.
Dostępne opcje to:
Powiedz Emacsowi, aby w jakiś sposób zignorował ostrzeżenie.
Rzuć moim własnym
flet
.
Jakie jest najlepsze podejście?
my-flet
) I usunąłem przestarzałe ostrzeżenie, i używam go w każdym pakiecie, który wcześniej wymagał fletu.Odpowiedzi:
Aby uzyskać takie samo zachowanie, jak zwykle
flet
,cl-letf
zmieniaj wartość funkcji symboli.Jeśli chcesz rzucić własne
flet
, najprostszym sposobem byłoby makro, które rozwija się docl-letf
postaci.Edycja: rzuciłem
źródło
cl-letf
nie stanowi właściwej alternatywy (IIRC, nie działa w przypadkuflet
symboli, które jeszcze nie sąfboundp
). dlatego wersja wstecznie kompatybilnaflet
jest nieco ... skomplikowana . "Artur Malabarba napisał to niedawno w Zrozumienie letf i tego, jak zastępuje flet .
letf
jest pseudonimemcl-letf
i chociaż najprawdopodobniej jest to, czego chcesz, istnieje drobne zastrzeżenie, na które Artur zwraca uwagę:(
noflet
Pakiet Nic zapewnia rozszerzoną funkcjonalność zgodnie z tymi liniami.)źródło