2017-07-25 4 views
1

J'ai le code elisp comme ceci:Elisp bind variable se

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

Ce que je veux est de faire a liste ("ABCD") mais étant donné que le nom de l'argument de la fonction testa est la même que la variable a, la liaison locale de a dans la fonction est elle-même, ce qui ne lie pas la valeur en dehors de la fonction.

Ma question est la suivante: Est-ce la caractéristique d'elisp que je ne peux pas contourner si je ne renomme pas la variable à l'extérieur ou y a-t-il une solution soignée?

Répondre

1

Ceci est le comportement prévu dans elisp. Pour plus d'informations sur la portée variable avec elisp, the manual a une explication approfondie. This post fait également un bon travail d'explication de la portée.

Il n'est pas possible de transmettre une référence à une variable. Il est cependant possible de passer une fonction qui renvoie ou modifie une variable étendue globalement (ou dynamiquement). Il est également possible d'avoir une fonction qui modifie une variable déjà connue.

Modifier: Plus de détails.

+1

Cela ne répond pas à la question - il n'explique pas le comportement que l'OP s'interroge. Veuillez incorporer certaines parties pertinentes de l'explication que vous liez à. Sinon, il s'agit essentiellement d'une réponse à lien uniquement et risque d'être supprimé. – Drew

+1

Merci. Peut-être que j'ai besoin de définir la fonction en utilisant la liaison lexicale qui fonctionne. – hw9527