Eu tenho algum código que usa flet
para alterar temporariamente o comportamento das funções.
;; prevent changing the window
(flet ((pop-to-buffer (buffer &rest args)
(switch-to-buffer buffer)))
(compilation-next-error-function n reset))
No entanto, o compilador de bytes do Emacs emite um aviso:
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'.
No entanto, cl-flet
funciona de maneira diferente e não se adequa a alguns casos de uso, e acredito que esse seja um desses casos.
As opções que eu posso ver são:
Qual é a melhor abordagem?
my-flet
) e removi o aviso obsoleto e o usei em qualquer pacote que exigisse flet anteriormente.Respostas:
Para obter o mesmo comportamento com o qual você está acostumado
flet
, usecl-letf
para alterar o valor da função de um símbolo.Se você criar o seu próprio
flet
, a maneira mais fácil seria a macro que se expande para umcl-letf
formulário.Editar: rolou
fonte
cl-letf
não é uma alternativa adequada (IIRC, ele não funciona paraflet
símbolos que ainda não existemfboundp
). é por isso que uma versão compatível com versões anterioresflet
é um pouco ... complicada ".Artur Malabarba escreveu isso recentemente, em Entendendo o letf e como ele substitui o flet .
letf
é um apelido paracl-letf
, e embora seja mais provável o que você deseja, há uma pequena advertência que Artur aponta:(O
noflet
pacote de Nic fornece funcionalidade estendida nesse sentido.)fonte