インストールした一部の elisp 関数で警告が生成されます。
`flet' is an obsolete macro (as of 24.3); use either `cl-flet' or `cl-letf'.
単にすべてflet
をに置き換えると危険cl-flet
ですか? 交換しても良いとしたら、どちらが良いでしょうか?
置き換えても問題がなければ、プロジェクトにプル リクエストを送ります。
彼らがそれを変えないのには何か理由がありますか?
インストールした一部の elisp 関数で警告が生成されます。
`flet' is an obsolete macro (as of 24.3); use either `cl-flet' or `cl-letf'.
単にすべてflet
をに置き換えると危険cl-flet
ですか? 交換しても良いとしたら、どちらが良いでしょうか?
置き換えても問題がなければ、プロジェクトにプル リクエストを送ります。
彼らがそれを変えないのには何か理由がありますか?
このcl-letf
関数は、Artur がこのブログ エントリで説明しているように、関数の動的バインディングに使用できます。
エイリアスを使用または作成するように関数を変更できますlawlist-flet
-私がしたことは、警告を削除してflet
マクロの名前を次のように変更することだけでしたlawlist-flet
:
;;;;;;;;;;;;;;;;;;;;;;;;;;;; FLET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro lawlist-flet (bindings &rest body)
"Make temporary overriding function definitions.
This is an analogue of a dynamically scoped `let' that operates on the function
cell of FUNCs rather than their value cell.
If you want the Common-Lisp style of `flet', you should use `cl-flet'.
The FORMs are evaluated with the specified function definitions in place,
then the definitions are undone (the FUNCs go back to their previous
definitions, or lack thereof).
\(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
(declare (indent 1) (debug cl-flet)
;; (obsolete "use either `cl-flet' or `cl-letf'." "24.3")
)
`(letf ,(mapcar
(lambda (x)
(if (or (and (fboundp (car x))
(eq (car-safe (symbol-function (car x))) 'macro))
(cdr (assq (car x) macroexpand-all-environment)))
(error "Use `labels', not `flet', to rebind macro names"))
(let ((func `(cl-function
(lambda ,(cadr x)
(cl-block ,(car x) ,@(cddr x))))))
(when (cl--compiling-file)
;; Bug#411. It would be nice to fix this.
(and (get (car x) 'byte-compile)
(error "Byte-compiling a redefinition of `%s' \
will not work - use `labels' instead" (symbol-name (car x))))
;; FIXME This affects the rest of the file, when it
;; should be restricted to the flet body.
(and (boundp 'byte-compile-function-environment)
(push (cons (car x) (eval func))
byte-compile-function-environment)))
(list `(symbol-function ',(car x)) func)))
bindings)
,@body))