2017-07-25 3 views
1

Ich habe elisp Code wie folgt:Elisp Variable binden an sich

(setq a nil) 
(defun testa (a) (add-to-list a "ABCD")) 
(testa 'a) 

Was ich will, ist a Liste ("ABCD") aber seit dem Argument Name der Funktion testa ist die gleiche wie variable a, die lokale Bindung zu machen von a in der Funktion ist selbst, die den Wert außerhalb der Funktion nicht bindet.

Meine Frage ist: Ist es das Merkmal von elisp, dass ich nicht umgehen kann, wenn ich die Variable nicht außerhalb umbenenne oder gibt es eine saubere Lösung?

Antwort

1

Dies ist das beabsichtigte Verhalten in elisp. Weitere Informationen zum Variablen-Scoping mit elisp finden Sie unter the manual. This post macht auch eine gute Arbeit, um das Scoping zu erklären.

Es ist nicht möglich, einen Verweis auf eine Variable zu übergeben. Es ist jedoch möglich, eine Funktion zu übergeben, die eine globale (oder dynamische) Bereichsvariable zurückgibt oder modifiziert. Es ist auch möglich, eine Funktion zu haben, die eine bereits bekannte Variable modifiziert.

Bearbeiten: Hinzugefügt mehr Details.

+1

Dies beantwortet die Frage nicht - es erklärt nicht das Verhalten, über das sich das OP Gedanken macht. Bitte fügen Sie einige relevante Teile der Erklärung bei, auf die Sie verlinken. Ansonsten handelt es sich im Wesentlichen um eine reine Link-Antwort, und es besteht die Gefahr, dass sie gelöscht wird. – Drew

+1

Danke. Vielleicht muss ich die Funktion mit lexikalischer Bindung definieren, die funktioniert. – hw9527