Ich schrieb eine Funktion, die jede Art annehmen kann, eine beliebige Anzahl von Argumenten und damit es den Namen und den Wert der Argumente drucken kann. Die Funktion funktioniert wie erwartet. Aber ich mag es nicht, die Funktion Anruf erfordert, dass ich ein Zitat von Wert wie diese (my-message 'emacs-version 'emacs-copyright)
übergeben. Ich möchte zu (my-message emacs-version emacs-copyright)
vereinfacht werden. Daher benutze ich Makro, um die Funktion neu zu schreiben.Nachricht im Makro zweimal gedruckt
(defmacro my-message (&rest args)
(if args
(progn
(message "This is the start of debug message.\n")
(dolist (arg args)
(cond
((stringp arg)
(message arg))
((numberp arg)
(message (number-to-string arg)))
((boundp arg)
(pp arg)
(message "")
(pp (symbol-value arg)))
((not (boundp arg))
(pp arg)
(message "Undefined")))
(message "\n"))
(message "This is the end of debug message."))
(message "This is a debug message ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")))
Allerdings werden einige der Nachrichten zweimal gedruckt.
(my-message emacs-version emacs-copyright 12345 "HelloWorld" foobar)
This is the start of debug message.
emacs-version
"24.5.1"
[2 times]
emacs-copyright
"Copyright (C) 2015 Free Software Foundation, Inc."
[2 times]
12345
[2 times]
HelloWorld
[2 times]
foobar
Undefined
[2 times]
This is the end of debug message.
Was ist das Problem?
Dies ist der wahre Grund warum "[2 mal]" produziert wurde. – tom