ruby on rails 3 Emacs रूबी लगभग पूर्ण काम कर रहे हैं



ruby-on-rails-3 ide (1)

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

मेरा सेटअप यहां है: https://github.com/map7/simple_emacs

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

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

"test".up...

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

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

अद्यतन करें:

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

अद्यतन करें:

यह emacs-rails के भीतर है -> रेल-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))))

क्या कोई समझा सकता है कि यह स्वतः पूर्ण क्यों होता है?


यहां एक विचार है: मैक्रो एक flet फ़ंक्शन (rails-project:root) को उस मान के लिए एक बार बांधता है (rails-project:root) body निष्पादन से ठीक पहले body । (इस तरह यह प्रदर्शन में वृद्धि का दावा करता है: स्पष्ट रूप से बाहरी (rails-project:root) महंगा है, इसलिए एक बार कॉल करना और मूल्य को कैश करना एक अच्छा विचार है।)

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





elisp