2010-07-16 10 views
5

मेरे पास मेरे .emacs में कोड का निम्न भाग है:लैम्बडा में रखे जाने से पहले अभिव्यक्ति का मूल्यांकन करें

(dolist (mode '(scheme emacs-lisp lisp clojure)) 
    (add-hook 
    (intern (concat (symbol-name mode) "-mode-hook")) 
    (lambda() 
    (progn 
     (run-programming-hook) 
     (message "%s" (concat (symbol-name mode) "-mode"))) 

स्पष्ट रूप से mode वैरिएबल शून्य है जब लैम्ब्डा निष्पादित हो जाता है। सवाल यह है कि मैं mode का मूल्यांकन इस तरह से करता हूं कि यह एक चर के रूप में एक लैम्ब्डा में नहीं बल्कि उस चर के मूल्य के रूप में नहीं मिलता है? दूसरे शब्दों में, मैं चाहता हूं कि जब हुक चलाया जाए तो संदेश मुद्रित किया जाए।

+1

बस एक क्विक नोट: अपने "जाहिर है ... शून्य है" गलत है - यह * चाहिए * * नहीं * इस तरह से हो सकता है, और Emacs लिस्प है बहुत कम भाषाओं में से एक जहां यह अभी भी होता है। इसे गतिशील गुंजाइश कहा जाता है। इससे संबंधित, Emacs में 'लेक्सिकल-लेट' फॉर्म की तलाश करें, जो एक हैक है जो काम करने वाले सैनिअर व्यवहार को अनुकरण करता है। –

उत्तर

10

आप क्या उपयोग कर सकते हैं backquote है:

(dolist (mode '(scheme emacs-lisp lisp clojure)) 
    (add-hook 
    (intern (concat (symbol-name mode) "-mode-hook")) 
    `(lambda() 
     (run-programming-hook) 
     (message "%s" ,(concat (symbol-name mode) "-mode"))))) 
संबंधित मुद्दे