Emacs में setq
और defvar
लिस्प में क्या अंतर है ?
मुझे /programming/3855862 पर समान प्रश्न का सामान्य लिस्प संस्करण दिखाई देता है । क्या वे एलीस्प में समान हैं?
Emacs में setq
और defvar
लिस्प में क्या अंतर है ?
मुझे /programming/3855862 पर समान प्रश्न का सामान्य लिस्प संस्करण दिखाई देता है । क्या वे एलीस्प में समान हैं?
जवाबों:
आपको Emacs से यह प्रश्न पूछना चाहिए : C-h i
Elisp m Elisp
Manual ( ) चुनें, और "defvar" ( i defvar
) के लिए इंडेक्स खोजें । यह आपको परिभाषित चर को नोड करने के लिए ले जाता है ।
Emacs आपको बताता है कि defvar
एक डॉक्टर स्ट्रिंग संलग्न करने की अनुमति देता है , और यदि चर पहले से ही एक मूल्य है तो यह कुछ भी नहीं करता है ।
यह आपको defvar
असाइन किए जाने वाले मूल्य के उपयोग के बारे में भी बताता है (defvar foo)
:। यह आपको बताता है कि चर को गतिशील रूप से स्कोप घोषित किया गया है ।
setq
उन गुणों में से कोई भी नहीं है।
defvar
और setq
समान हैं, लेकिन Emacs लिस्प और कॉमन लिस्प में समान नहीं हैं।
defvar
कि एक वैश्विक चर (जैसा कि अनिवार्य प्रोग्रामिंग शैली में) और अनुकूलन के लिए एक सम्मेलन है, जबकि सेटैक कार्यात्मक प्रोग्रामिंग भाषाओं (गतिशील / लेक्सिकल स्कूपिंग नियम के साथ) में एक बंधन के समान है, जिसके आधार पर वैश्विक स्कूपिंग मोड सक्रिय है। .......)
setq
एक var मान सेट करता है, भले ही var (घटना) स्थानीय हो। defvar
वैर को वैश्विक घोषित करता है। (यह "बफ़र-लोकल" भी हो सकता है local-variable-p
:)। एक फंक्शन अर्ग या बायर के रूप में होने वाली एक वार्निंग let
सामान्य अर्थ में "लोकल" है। यदि let
आदि से बंधा कोई संस्करण वैश्विक है (या बफर-लोकल) तो उसके लिए एक स्थानीय बाइंडिंग (सामान्य अर्थ) बनाया जाता है, उस अवधि / दायरे के लिए let
। उस बाध्यकारी दायरे के भीतर, setq
स्थानीय मूल्य को बदलता है। एक var घटना स्थानीय होने के बारे में बात करना बेहतर है (स्टैक पर) या वैश्विक (ढेर पर) एक var ऐसा होने से।
M-x report-emacs-bug
उन सुधारों का सुझाव देना मददगार हो सकता है जो दूसरों को इसे आसान बनाने में मदद कर सकते हैं।