मैंने पाया है कि उनके इंस्टॉलेशन निर्देशों में अलग-अलग पैकेज या तो पुश या ऐड-टू-लिस्ट का उपयोग करते हैं (उदाहरण के लिए एक निर्देशिका को लोड-पथ में जोड़ना) और मैं सोच रहा था कि क्या अंतर है और प्रत्येक के लिए उपयोग का मामला क्या होगा।
मैंने पाया है कि उनके इंस्टॉलेशन निर्देशों में अलग-अलग पैकेज या तो पुश या ऐड-टू-लिस्ट का उपयोग करते हैं (उदाहरण के लिए एक निर्देशिका को लोड-पथ में जोड़ना) और मैं सोच रहा था कि क्या अंतर है और प्रत्येक के लिए उपयोग का मामला क्या होगा।
जवाबों:
क्या # ज़ेक उल्लेख एक अंतर है। लेकिन अगर केवल यही अंतर होता तो आप के बारे में पूछ सकते हैं cl-pushnew
और add-to-list
।
एक और महत्वपूर्ण अंतर: add-to-list
एक फ़ंक्शन है, जिसका अर्थ है कि यह अपने सभी तर्कों का मूल्यांकन करता है, विशेष रूप से, पहला। push
एक मैक्रो है (जैसा है cl-pushnew
) - यह उसके दूसरे तर्क का मूल्यांकन नहीं करता है; इसके बजाय, यह एक सामान्यीकृत स्थान के रूप में व्याख्या करता है।
उदाहरण के लिए, यदि दूसरा तर्क एक प्रतीक है तो इसे एक चर के रूप में माना जाता है, और पहले तर्क के मूल्य को उस प्रतीक के मान पर एक चर के रूप में स्वीकार किया जाता है, और चर को उस नए विपक्ष में सेट किया जाता है।
जैसा कि डॉक्टर स्ट्रिंग add-to-list
कहते हैं:
This is handy to add some elements to configuration variables,
but please do not abuse it in Elisp code, where you are usually
better off using `push' or `cl-pushnew'.
add-to-list can't use lexical var ...; use push or cl-pushnew
(push (5 6) my-list)
अभी भी मुझे एक त्रुटि देता है - 5
एक फ़ंक्शन नहीं है। यह कैसे add-to-list
व्यवहार से अलग है ?
(5 6)
को स्थान (चर का मान) पर धकेलना चाहते हैं my-list
तो आपको सूची बनाने की आवश्यकता है (5 6)
। ऐसा करने का एक तरीका उपयोग करना है '(5 6)
; एक और उपयोग करना है (list 5 6)
। push
तर्क का मूल्यांकन करता है।
push
एक जगह है, जैसे कि एक चर। पहले arg का मूल्यांकन उस चर के मान पर किया जाता है, और चर को उस नए विपक्ष में सेट किया जाता है। add-to-list
वैरिएबल का उत्पादन करने के लिए इसके पहले arg का मूल्यांकन करता है जिसका मूल्य अपडेट हो जाता है। push
इसके दूसरे arg का मूल्यांकन नहीं करता है, जो अद्यतन करने के लिए चर है। दोनों के बीच आर्ग क्रम उलट जाता है।
से Emacs प्रलेखन , या C-h f push
:
मैक्रो: धक्का तत्व सूचीनाम
यह मैक्रो एक नई सूची बनाता है जिसकी कार तत्व है और जिसकी सीडीआर सूचीनाम द्वारा निर्दिष्ट सूची है, और उस सूची को सूचीनाम में सहेजती है।
उसी पृष्ठ से, या C-h f add-to-list
:
फंक्शन: ऐड-टू-लिस्ट प्रतीक तत्व और वैकल्पिक परिशिष्ट तुलना-एफएन
यह फ़ंक्शन पुराने मान पर तत्व को परिवर्तित करके चर प्रतीक सेट करता है, यदि तत्व पहले से ही उस मूल्य का सदस्य नहीं है।
add-to-list
यदि तत्व पहले से ही नहीं है तो केवल धक्का देता है।
cl-pushnew
जैसा व्यवहार करता है add-to-list
।
एक और अंतर:
push
सूची की शुरुआत में तत्व जोड़ता है ।
add-to-list
आपको सूची की शुरुआत या अंत में तत्व जोड़ने की अनुमति देता है ।
(setq testasdf nil)
(push 'a testasdf)
testasdf
(a)
(add-to-list 'testasdf 'b)
testasdf
(b a)
;; add element to the end
(add-to-list 'testasdf "hello" t)
testasdf
(b a "hello")
add-to-list
का उपयोग कर कोड कोcl-pushnew
, और मैंने पाया काफी enlightling जा करने के लिए इस ब्लॉग पोस्ट: yoo2080.wordpress.com/2013/09/11/...