help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Dynamically constructing advice behaves strangely


From: Michael Heerdegen
Subject: Re: Dynamically constructing advice behaves strangely
Date: Sun, 14 Feb 2016 16:44:03 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.91 (gnu/linux)

Marcin Borkowski <mbork@mbork.pl> writes:

> (defun add-constructed-advice (fun)
>   "Add a constructed advice to function foo."
>   (let* ((fun-name (symbol-name fun))
>        (length-sym
>         (make-symbol (concat "length-of-" fun-name)))
>        (piece-of-advice-sym
>         (make-symbol (concat "advice-for-" fun-name)))
>        (piece-of-advice (lambda (orig-fun &rest args)
>                           (apply orig-fun args)
>                           (message "This function's name had length %s."
>                                    (symbol-value length-sym)))))

Also, `length-sym' doesn't have to be an uninterned symbol here.  You
use lexical-binding anyway (by referring to the value of the (interned!)
symbol named "length-sym".  You don't even have to use a symbol with a
unique name.  Just use a simple (lexical) variable for the length,
e.g. `advice-length', and

(message "This function's name had length %s." advice-length)

etc. (your piece of advice is a closure!).


Michael.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]