बफर-लोकल वैरिएबल की सभी विविधताओं पर मैं बिल्कुल स्पष्ट नहीं हूं, यहां तक कि सभी डॉक और एसएक्स पर पोस्टिंग का एक गुच्छा पढ़ने के बाद भी।
यहाँ मेरी समझ का सारांश है:
(defvar foo ..)
फ़ाइल के लिए एक गतिशील चर घोषित करता है। लेकिन चर (1) अन्य फ़ाइलों के लिए ज्ञात नहीं है जब तक कि वे एक defvar
बयान के रूप में अच्छी तरह से शामिल नहीं करते हैं , और (2) चर दायरे में वैश्विक है, बफर स्थानीय नहीं।
(make-variable-buffer-local foo)
defvar
उपर्युक्त के बाद संकलक और बाकी सभी को बताता है कि चर फू को हर जगह बफर-लोकल के रूप में माना जाना है, जब यह सेट होता है। इसलिए यह स्टेटमेंट बफर-लोकल वैरिएबल घोषित करने, दोनों स्टेटमेंट्स को फाइल में बैक-टू-बैक डालने के लिए अच्छा स्टाइल है।
(defvar xxx ...) ;declare xxx with global scope
(make-variable-buffer-local 'xxx) ;but now make it buffer-local everywhere
सुविधा के लिए, (defvar-local xxx ...)
फॉर्म को ऊपर की दो लाइनों के स्थान पर एक लाइन के रूप में इस्तेमाल किया जा सकता है:
(defvar-local xxx ...) ;make xxx buffer local everywhere
एक बार उपरोक्त के रूप में घोषित किया गया, चर xxx का उपयोग सेट स्टेटमेंट में किसी भी अन्य चर की तरह किया जा सकता है।
अगर मैं सिर्फ एक बफर-स्थानीय चर का एक उदाहरण चाहता हूं जो पहले से ही एक वैश्विक गतिशील चर है, तो मैं निम्नलिखित घोषणाओं का उपयोग करूंगा। पहले वाला वैश्विक-स्कोप डायनेमिक चर घोषित करता है, और दूसरा स्टेटमेंट वर्तमान बफ़र में उस वेरिएबल के बफर-लोकल वर्जन का सिर्फ एक उदाहरण बनाता है:
(defvar xxx ...) ;declare xxx with global scope
(make-local-variable 'xxx) ;make xxx local in this buffer only
अब मेरे खोज प्रश्नों के लिए (उपरोक्त सभी इस पर अंतर्निहित प्रश्न थे कि क्या मेरी समझ सही है)।
चरों का मान सेट करते समय, मैं उपयोग setq
या
कर सकता हूँ setq-local
। कब setq-local
इस्तेमाल किया जाना चाहिए? क्यों?
यदि मैं setq-local
बफर-लोकल वर्जन, या नॉन-बफर-लोकल वर्जन पर उपयोग करता हूं तो क्या होगा ?
क्या घोषित चर के setq-local
लिए आवश्यक है defvar-local
?
क्या setq-local
सामान्य defvar
घोषित चर इसे बफर-स्थानीय चर में बदल देगा? (दूसरे शब्दों में, setq-local
किसी तरह एक (make-variable-local xxx)
घोषणा के बराबर है ?
(setq-local VAR VALUE)
के लिए बस आशुलिपि है (set (make-local-variable VAR) VALUE)
, जो (और अभी भी) एक सामान्य मुहावरा था।