2008-10-17 25 views
20

Elisp'te bir yöntemi diğerine aktarmaya çalışıyorum ve daha sonra bu yöntemin uygulanmasına izin verdi. Ben 't' lisp içinde truth value olarak kullanılan olarak adlandırma sizin işlevi t yardımcı olduğunu emin değilim,Elisp'de bir işlevi parametre olarak nasıl geçiririm?

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

cevap

30

İlk: İşte bir örnek. sözü

, aşağıdaki kod benim için çalışıyor:

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

gerçek işlev çağrısını tetikler 'funcall' kullanımını unutmayınız.

+2

Evet, kesinlikle 't' ve 'nil' sembollerini hiçbir şeyin isimleri olarak kullanmaya çalışmaktan kaçınmak istersiniz. (Elbette, kendileri için - bunların değerlendirilmesi aynı sembolü geri verir.) – SamB

+0

Bu senaryoda, "func-caller" işlevi gereksizdir, tabii ki, eğer böyle bir işlev çağrısı üzerine bazı ek kodları değerlendirmek için gerekli olmadıkça . – phils

6

this page'un sonundaki not, sembolün her zaman bir işlevi adlandıracağı bayt derleyicisine sinyal vermek için ' yerine #' işlevlerini kullanabileceğinizi belirtir.

İlgili konular