मैंने पाया है कि उनके इंस्टॉलेशन निर्देशों में अलग-अलग पैकेज या तो पुश या ऐड-टू-लिस्ट का उपयोग करते हैं (उदाहरण के लिए एक निर्देशिका को लोड-पथ में जोड़ना) और मैं सोच रहा था कि क्या अंतर है और प्रत्येक के लिए उपयोग का मामला क्या होगा।
मैंने पाया है कि उनके इंस्टॉलेशन निर्देशों में अलग-अलग पैकेज या तो पुश या ऐड-टू-लिस्ट का उपयोग करते हैं (उदाहरण के लिए एक निर्देशिका को लोड-पथ में जोड़ना) और मैं सोच रहा था कि क्या अंतर है और प्रत्येक के लिए उपयोग का मामला क्या होगा।
जवाबों:
क्या # ज़ेक उल्लेख एक अंतर है। लेकिन अगर केवल यही अंतर होता तो आप के बारे में पूछ सकते हैं 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/...