2017-10-31 7 views
1

Ich arbeite an zwei allgemeinen Funktionen für die Ausführung von unabhängigen Unit-Tests in elisp. Bei einem geht es darum, etwas zu tun und alle benutzerdefinierten Variablen meines Pakets zurückzusetzen, bei dem anderen geht es darum, etwas in einem temporären Puffer zu tun und alle benutzerdefinierten Variablen meines Pakets zurückzusetzen.Verschachtelt (Funcall Func) überschreitet Max-Lisp-Eval-Tiefe, warum?

Funktion (allgemein):

(defun package-test-test (func) 
    "" 
    (unwind-protect 
     (funcall func) 
     (reset-all-custom-package-variables))) 

Funktion (temp-Puffer):

(defun package-test-test-in-buffer (func) 
     "" 
     (package-test-test 
      (lambda() 
       (with-temp-buffer (funcall func))))) 

wenn ich rufe jetzt: (package-test-test-in-buffer (lambda() (insert "a"))) es überschreitet max-lisp-eval-depth, warum (es gibt keine Rekursion ist)?

+0

Bitte aktivieren Sie 'Debug-on-error' in der Menüoptionen und untersuchen Sie die' * Backtrace * 'Puffer. – sds

+0

Es sieht so aus, dass es nicht erlaubt ist, dass zwei den gleichen Parameternamen haben, wenn sie später als Funktionen aufgerufen werden. – lordnik22

+0

Nun, Sie sind * erlaubt * (daher das Symptom Ihres Problems), aber was passiert * ist, dass 'package-test-test' die Variable' func' an eine Funktion bindet, die selbst '(funcall func) 'anspricht und dann ruft es diese Funktion auf. Daher die unendliche Rekursion. – phils

Antwort

Verwandte Themen