Als «elisp-macros» getaggte Fragen

Mit Emacs Lisp-Makros können Sie neue Steuerelementkonstrukte und andere Sprachfunktionen definieren. Ein Makro wird ähnlich wie eine Funktion definiert, aber anstatt zu erklären, wie ein Wert berechnet wird, wird angegeben, wie ein anderer Lisp-Ausdruck berechnet wird, der wiederum zur Berechnung des Werts ausgewertet wird. Wir nennen diesen Ausdruck die "Erweiterung" des Makroaufrufs. Der Makroaufruf wird zuerst erweitert und dann ausgewertet, wobei der Wert dieser Auswertung zurückgegeben wird.

2
"Und" vs "wann" für Bedingungen
Dies ist eine Fortsetzung der Kommentare zu dieser Antwort . Die folgenden Codebits scheinen äquivalent zu sein: (and a b) (when a b) Natürlich andkönnen Sie mehr Bedingungen stellen: (and a b c d)bedeutet(when (and a b c) d) Ich neige dazu, whennur Verzweigungen auszudrücken. Gibt es tatsächliche Unterschiede? Ist …


1
Makro mit defcustom führt beim Kompilieren von Bytes zum Fehler "Symbolwert als Variable ist ungültig"
In zwei meiner Pakete habe ich ein Makro, bei dem der Körper von einer in einem defcustomFormular definierten Variablen abhängt . Bei der Installation der Pakete von Melpa endet die Byte-Kompilierung mit: Fehler: Der Wert des Symbols als Variable ist ungültig: meine-definierte-Variable Dann funktioniert die manuelle Byte-Kompilierung der Datei durch …

3
Wann man ein Makro benutzt oder nicht benutzt [closed]
Geschlossen . Diese Frage muss gezielter gestellt werden . Derzeit werden keine Antworten akzeptiert. Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage so, dass sie sich nur auf ein Problem konzentriert, indem Sie diesen Beitrag bearbeiten . Geschlossen vor 3 Jahren . Wann sollte ich Makro in meinem Programm …

2
Wie verwende ich, während ich keine Eingabe mache?
Aus der Dokumentationszeichenfolge: Führen Sie BODY nur aus, solange keine Eingabe ansteht. Wenn eine Eingabe eintrifft, wird die Ausführung von BODY beendet und while-no-inputt zurückgegeben. Wenn Sie aufhören, wird Null zurückgegeben. Wenn BODY beendet ist, while-no-inputwird der von BODY erzeugte Wert zurückgegeben. Wenn ich das richtig verstehe, kann ich mit …

3
Wie kann ich mehrere Defuns erstellen, indem ich eine Liste durchlaufe?
Ich arbeite an der Optimierung meiner Emacs-Konfiguration, in der ich dynamisch interaktive Funktionen für alle Themen erstellen kann, die ich in einer Liste habe. Unten finden Sie eine vereinfachte Version des Konstrukts, mit dem ich arbeiten möchte. ;; List containing names of functions that I want to create (setq my/defun-list …

1
Wie wird das variable Scoping für Makros bestimmt?
Nehmen Sie das folgende Beispielmakro, definiert in macro.el. (defmacro some-macro (&rest body) `(let ((some-variable 1)) ,@body)) Nehmen Sie die folgende Funktion, die in einer anderen Datei definiert ist function.el. (defun some-function () (some-macro (do-something))) Wann function.elwird Byte kompiliert, wird some-variableunter lexikalischer oder dynamischer Bindung gebunden? Ich verstehe, dass dies davon …

1
eval-when-compile: defsubst vs defmacro vs define-inline
Ich habe in init.el einige einfache Funktionen definiert, zum Beispiel my-cache-file: (defconst my-cache-directory (expand-file-name ".cache" user-emacs-directory)) ; ~/.emacs/.cache (defun my-cache-file (x) (expand-file-name x my-cache-directory)) ; ~/.emacs/.cache/x (setq savehist-file (my-cache-file "savehist")) (setq backup-directory-alist `(("." . ,(my-cache-file "backups/")))) Dies schien ein guter Anwendungsfall für defsubst: (defsubst my-cache-file (x) ...) Dann fing ich …

1
Nicht-interne Symbole und Makro-Erweiterung verstehen?
Ich möchte meinen Mangel an Wissen anhand eines Beispiels demonstrieren. Verwenden Sie die folgenden zwei Makrodefinitionen: (defmacro for (var from init to final do &rest body) "Execute a simple for loop: (for i from 1 to 10 do (print i))." (let ((tempvar 'max)) `(let ((,var ,init) (,tempvar ,final)) (while (<= …

1
Autoloads und Variablen
Ich verstehe, was das automatische Laden für Funktionen bewirkt (Registerdatei, die geladen werden soll, wenn eine solche Funktion aufgerufen oder ihre Dokumentationszeichenfolge abgerufen wird). Es ist jedoch nicht klar, wie die Autoload-Funktion in Verbindung mit Variablen und Makros verwendet wird. Ich habe zwei Fragen: Was passiert, wenn das Paket einen …

1
Setf seltsame Erweiterung
Ich versuchte zu verstehen, was setfich tun kann, und rief an (macroexpand '(setf (aref vec i) val)) ⇒ (let* ((v vec) (v i)) (aset v v val)) Dies scheint offensichtlich falsch. Ich konnte jedoch keine tatsächliche Instanz erstellen, bei der ein Fehler (setf (aref ..auftritt. Z.B (setq vec (make-vector 10 …

1
Makro "cl-flet", das keine rekursiven Funktionen zulässt
Ich bin an das veraltete Elisp-Makro gewöhnt fletund wurde aufgefordert, zu zu wechseln cl-flet. Doch auf diese Änderung gestoppt einige meiner elisp Programme machen Arbeit und ich erkennen , der Grund , dass, im Gegensatz zu flet, cl-fletnicht für rekursive Funktionen erlaubt. Beispiel: Definieren Sie die folgende Funktion (defun show-problem-in-action …

2
Wie kann ich ein Makro ändern, das ich häufig aufrufe?
Ich use-packageorganisiere meine init.el. Mir ist aufgefallen, dass alle meine Erklärungen verwenden :ensure t. Eine Beispieldeklaration lautet: (use-package auto-complete :ensure t :diminish auto-complete-mode :init (global-auto-complete-mode t)) Gibt es eine Möglichkeit, Änderungen implizit einzuschließen, ohne use-package.el direkt zu ändern , da alle meine use-packageDeklarationen verwendet werden? Idealerweise möchte ich keine Funktion …
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.