2008-10-17 8 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

सबसे पहले मुझे यकीन है कि के रूप में 'टी' तुतलाना में 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

हां, आप निश्चित रूप से प्रतीकों 'टी' और 'शून्य 'को किसी भी चीज़ के नाम के रूप में उपयोग करने का प्रयास करना नहीं चाहते हैं। (बेशक, खुद के लिए - उनका मूल्यांकन करना एक ही प्रतीक को वापस लाता है।) – SamB

+0

इस परिदृश्य में 'func-caller' फ़ंक्शन अनावश्यक है, बेशक, जब तक आपको इस तरह के प्रत्येक फ़ंक्शन कॉल पर कुछ अतिरिक्त कोड का मूल्यांकन करने की आवश्यकता न हो । – phils

6

this page के अंत में टिप्पणी का कहना है कि आप बाइट संकलक है कि प्रतीक हमेशा के नाम एक समारोह संकेत करने के लिए #' बजाय ' साथ कार्यों को उद्धृत कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे