GNU bug report logs -
#47992
27; 28; Phase out use of `equal` in `add-hook`, `remove-hook`
Previous Next
Reported by: Daniel Mendler <mail <at> daniel-mendler.de>
Date: Sat, 24 Apr 2021 12:12:01 UTC
Severity: normal
Tags: fixed
Fixed in version 28.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
Message #103 received at 47992 <at> debbugs.gnu.org (full text, mbox):
Lars Ingebrigtsen <larsi <at> gnus.org> writes:
> Some other languages have the ability to add names to anonymous
> functions (yes, a contradiction in terms) to aid debugging and the like.
> We could also extend our `lambda' with an optional name -- it seems like
> that could be generally useful beyond this particular use case -- and
> then this new add-hook function could refuse to accept name-less
> lambdas...
BTW, I think you can have something like that by misusing advice,
e.g. (example at the end):
#+begin_src emacs-lisp
(defalias 'function-name-advice #'identity) ;just a tag
(defun named-function (f name)
(unless (and (functionp f)
(not (symbolp f)))
(error "Not an anonymous function"))
(when (advice-function-member-p 'function-name-advice f)
(error "Already has a name"))
(add-function :filter-return (var f) 'function-name-advice `((name . ,name)))
f)
(defun function-name (f)
(and (advice-function-member-p 'function-name-advice f)
(cdr (assoc 'name (advice--props f)))))
;; Example:
(setq my-test-lambda (lambda (n) (+ 2 n)))
(setq my-named-test-lambda
(named-function my-test-lambda "Moon Child")) ;; => [bytecode lambda]
(funcall my-named-test-lambda 3) ;; => 5 (works)
(function-name my-named-test-lambda) ;; => "Moon Child"
#+end_src
Michael.
This bug report was last modified 3 years and 323 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.