2008-10-17 33 views
20

Próbuję przekazać jedną metodę do drugiej w elispie, a następnie , aby ta metoda go wykonała. Oto przykład:Jak przekazać funkcję jako parametr do elisp?

(defun t1() 
    "t1") 

(defun t2() 
    "t1") 

(defun call-t (t) 
    ; how do I execute "t"? 
    (t)) 

; How do I pass in method reference? 
(call-t 't1) 

Odpowiedz

30

Po pierwsze, nie jestem pewien, że nazywanie czynność t pomaga jak „t” jest używany jako truth value w Lisp.

Powiedział, że następujący kod działa dla mnie:

(defun test-func-1() "test-func-1" 
    (interactive "*") 
    (insert-string "testing callers")) 

(defun func-caller (callee) 
    "Execute callee" 
    (funcall callee)) 

(func-caller 'test-func-1) 

Proszę zwrócić uwagę na wykorzystanie „funcall”, który wyzwala rzeczywiste wywołanie funkcji.

+2

Tak, na pewno chcesz uniknąć używania symboli 't' i' nil' jako nazw dla czegokolwiek. (Z wyjątkiem, oczywiście, dla nich samych - ich ocena daje ten sam symbol.) – SamB

+0

Funkcja 'func-caller' jest nadmiarowa w tym scenariuszu, oczywiście, chyba że jest potrzebna do oceny jakiegoś dodatkowego kodu po każdym takim wywołaniu funkcji . – phils

6

Nota pod koniec this page mówi, że można przytoczyć funkcje z #' zamiast ' aby zasygnalizować kompilatora bajtów że symbol zawsze nazwy funkcji.

Powiązane problemy