2008-10-17 155 views
20

我试图在elisp中将另一种方法传递给另一个方法,然后 让该方法执行它。这里有一个例子:如何将函数作为参数传递给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) 

回答

30

首先,我不知道,命名为“t”用作LISP的truth value你的函数t帮助。

这就是说,下面的代码工作对我来说:

(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) 

请注意使用“funcall”的,这会触发实际的函数调用。

+2

是的,你一定要避免使用符号`t`和`nil`作为任何名字。 (当然,除了它们自己 - 评估它们会得到相同的符号。) – SamB 2011-03-04 23:15:13

6

this page末尾的注释指出,您可以使用#'而不是'引用函数来向字节编译器发出信号,告知该符号始终命名函数。

相关问题