[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.