タグ付けされた質問 「local-functions」

1
Emacs let-bound advice
コード内の関数を一時的にオーバーライドしたいと思います。 たとえば、次のことを考えてください。 (defun nadvice/load-quiet (args) (cl-destructuring-bind (file &optional noerror nomessage nosuffix must-suffix) args (list file noerror t nosuffix must-suffix))) (defun nadvice/idle-require-quiet (old-fun &rest args) (advice-add 'load :filter-args #'nadvice/load-quiet) (apply old-fun args) (advice-remove #'load #'nadvice/load-quiet)) (advice-add 'idle-require-load-next :around #'nadvice/idle-require-quiet) 動作しないもの: この。アドバイスを手動で有効または無効にすることを避け、Emacsのシングルスレッドの性質を信頼して物事を処理できれば、ずっときれいになります。 cl-letf元の関数を参照させないため、:filter-args通常行うことを実装できません。 cl-flet 他の関数の関数をオーバーライドすることはできません。 noflet避けたい外部パッケージです。(また、私が必要とする以上のことをします)

1
関数をローカルでオーバーライドしますが、元の関数の呼び出しを許可します
アドバイス機能により、関数の動作をグローバルに変更できます。アドバイス定義は、元の関数を呼び出すことができます。 (defadvice foo (around foo-bar activate compile) "Always set `qux' to t when running `foo'." (let ((qux t)) ad-do-it)) clパッケージは提供しflet、ローカルの機能を無効にするマクロを。 (defun foo () "global") (flet ((foo () "local")) (some-code-that-calls-foo)) それは元のfoo関数への参照を許可しません。ローカルのオーバーライドで元の関数を呼び出す必要がある場合はどうなりますか? (defun foo () "global") (flet ((foo () (concat (foo) "+local"))) ;; this will cause an infinite loop when (foo) is …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.