Ich habe einen Code , der verwendet wird flet
, um das Verhalten von Funktionen vorübergehend zu ändern.
;; prevent changing the window
(flet ((pop-to-buffer (buffer &rest args)
(switch-to-buffer buffer)))
(compilation-next-error-function n reset))
Der Byte-Compiler von Emacs gibt jedoch eine Warnung aus:
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'.
Funktioniert jedoch cl-flet
anders und eignet sich nicht für einige Anwendungsfälle. Ich glaube, dies ist einer dieser Fälle.
Die Optionen, die ich sehen kann, sind:
Sagen Sie Emacs, er soll die Warnung irgendwie ignorieren.
Roll mein eigenes
flet
.
Was ist der beste Ansatz?
my-flet
) und die veraltete Warnung entfernt und in jedem Paket verwendet, für das zuvor eine Flotte erforderlich war.Antworten:
Um das gleiche Verhalten erhalten Sie mit gewohnt sind
flet
, verwenden ,cl-letf
um ein Zeichen Funktionswert zu ändern.Wenn Sie Ihre eigenen würfeln
flet
würden, wäre der einfache Weg ein Makro, das sich zu einemcl-letf
Formular erweitert.Bearbeiten: rollte es
quelle
cl-letf
keine richtige Alternative darstellt (IIRC funktioniert nicht fürflet
Symbole, die noch nicht vorhanden sindfboundp
). Welche Aus diesem Grund ist eine abwärtskompatible Version vonflet
ein bisschen ... verworren . "Artur Malabarba schrieb dies kürzlich in " Letf verstehen und wie es Flet ersetzt" .
letf
ist ein Alias fürcl-letf
und obwohl es höchstwahrscheinlich das ist, was Sie wollen, gibt es eine kleine Einschränkung, auf die Artur hinweist:(Nic's
noflet
Paket bietet erweiterte Funktionen in diesem Sinne.)quelle