2011-11-03 13 views
131

मैं टाइपिंग कोड के दौरान एक स्वत: पूर्ण ड्रॉप डाउन बॉक्स को प्रकट करने के लिए अपने emacs कॉन्फ़िगरेशन को $ के उपयोग के साथ अद्यतन कर रहा हूं। यह अधिकांश फ़ाइलों में अच्छी तरह से काम करता है, सिवाय इसके कि मुझे लगता है कि यह मुझे तालिका से एक जवाब चुनने की अनुमति नहीं देता है जब मैं रेल परियोजना पर अपने रूबी में कुछ कोड संपादित कर रहा हूं। https://github.com/map7/simple_emacsEmacs रूबी स्वत: पूर्ण काम लगभग

मैं उबंटू 10.04 के तहत इस का उपयोग कर रहा:

यहाँ मेरी सेटअप है।

सरल रूबी स्क्रिप्ट फ़ाइलों के लिए यह बहुत अच्छा काम करता है। मैं एक नई फाइल खोल सकता हूं और टाइप कर सकता हूं।

"test".up... 

मैं विकल्पों की सूची अप में 'पी' वर्ण लिखने के बस के रूप में दिखाई देते हैं और मैं ऊपर और तीर कुंजियों के साथ इस सूची में नीचे जाने के लिए और एक का चयन कर सकते हैं (उदाहरण के लिए: upcase) दर्ज कुंजी के साथ।

काम नहीं करता है जब मैं एक ही परीक्षण करता हूं लेकिन रेल परियोजना के आधार निर्देशिका में।

अद्यतन:

मिला है कि समस्या (की आवश्यकता होती है 'रेल) के साथ है, इसलिए यह Emacs-रेल में कुछ प्लगइन है कि स्वत: पूर्ण पसंद नहीं करता है।

अद्यतन:

यह Emacs-रेल के भीतर है -> रेल-project.el। मैं इस मैक्रो बाहर तो स्वतः पूर्ण के कार्य टिप्पणी करते हैं, तो अन्यथा यह नहीं है:

(defmacro* rails-project:with-root ((root) &body body) 
    "If you use `rails-project:root' or functions related on it 
several times in a block of code, you can optimize your code by 
using this macro. Also, blocks of code will be executed only if 
rails-root exist. 
(rails-project:with-root (root) 
    (foo root) 
    (bar (rails-core:file \"some/path\"))) 
" 
`(let ((,root (rails-project:root))) 
    (when ,root 
     (flet ((rails-project:root() ,root)) 
     ,@body)))) 

कोई व्याख्या कर सकते हैं क्यों यह स्वत: पूर्ण टूट जाता है?

+1

इसका उपयोग कहां किया जाता है? – milkypostman

+1

स्वत: पूर्ण समारोह रूबी, सी ++, लिस्प और सबकुछ – map7

+1

में उपयोग किया जाता है मेरा मतलब था, यहां मैक्रो का उपयोग कहां किया जाता है? – milkypostman

उत्तर

6

यहाँ एक विचार है: मैक्रो मूल्य के लिए एक flet समारोह (rails-project:root) एक बार (rails-project:root) है कि बस से पहले body कार्यान्वित बांधता है। ,

दुर्भाग्य से अगर वहाँ body जानबूझकर मतलब एक पक्ष प्रभाव है कि अंदर कोड है: (जाहिरा तौर पर बाहरी (rails-project:root) महंगा है, इसलिए एक बार बुला और मूल्य कैशिंग एक अच्छा विचार की तरह लगता है कि यह कैसे एक प्रदर्शन वृद्धि का दावा है।) (rails-project:root) रिटर्न के मान को बदलने के लिए, इसका कोई प्रभाव नहीं पड़ेगा। यह परिवर्तन body के भीतर बुलाए गए अन्य कोड तक भी अदृश्य हो जाएगा क्योंकि Emacs lisp में flet नामों की गतिशील बाध्यकारी है।

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