फंक्शन और कमांड में क्या अंतर है?


35

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

प्रश्न: Emacs Lisp में, फंक्शन और कमांड में क्या अंतर है?


13
आपको ऐसा करने का पूरा अधिकार है, और मुझे यकीन है कि कुछ लोगों को इससे मदद मिलेगी। लेकिन एफडब्ल्यूआईडब्ल्यू मैं क्यू एंड ए के पक्ष में नहीं हूं, यहां हर छोटी चीज के लिए यह बेहतर हो सकता है कि आप किसी को एमाक्स के बारे में पूछें । यह एक ऐसा है, IMO - यह पता लगाना मुश्किल नहीं है, और Emacs एक अच्छा जवाब देता है। C-h i, Elisp मैनुअल चुनें , i command- आपको नोड में सही डालता है What is a function?, जो इस क्रिस्टल को स्पष्ट करता है। उपयोगकर्ताओं को Emacs पूछने में मदद करें। (सिर्फ एक राय।)
ड्रू

1
उस ने कहा, आपने प्रश्न का उत्तर दिया और अच्छी तरह से उत्तर दिया।
ड्रू

5
@ क्या मैं लोगों को पहले Emacs पूछने के लिए सिखाने पर 100% सहमत हूँ। इस विशिष्ट प्रश्नोत्तर का मुख्य उद्देश्य शर्तों के सही उपयोग को बढ़ावा देना और यदि आवश्यक हो तो आज्ञाओं और कार्यों के बीच अंतर के बारे में उपयोगकर्ताओं को अवगत कराना आसान है: कभी-कभी, लोगों को यह पता नहीं होता है कि यह एक सवाल है जो उन्हें पूछना चाहिए , और उन्हें इंगित करने के लिए जेनेरिक संसाधन होने के कारण टिप्पणियों में बार-बार एक ही सामग्री को दोहराने की तुलना में आसान है।
itsjeyd

1
उस ने कहा, Emacs के अंदर प्रासंगिक जानकारी खोजने का उल्लेख करने के लिए धन्यवाद :)
itsjeyd

1
हम सहमत हैं - यह उपयोगकर्ताओं को Emacs का उपयोग करने में मदद करने के बारे में है। यह साइट उस अंत का एक साधन है।
ड्रू

जवाबों:


44

हर कमांड एक फंक्शन है, लेकिन हर फंक्शन एक कमांड भी नहीं है। 1

एक कमांड में एक कॉल शामिल है interactive; यही कारण है कि आदेशों को आमतौर पर "इंटरैक्टिव कार्यों" के रूप में संदर्भित किया जाता है। कमानों के माध्यम से आह्वान किया जा सकता है M-x name-of-command RET, और वे एक महत्वपूर्ण अनुक्रम के लिए भी बाध्य हो सकते हैं। नियमित रूप से कार्य करता है नहीं करने के लिए एक फोन शामिल हैं interactive, कर सकते हैं नहीं का उपयोग कर कहा जा M-x, और तुम बाँध एक कुंजी क्रम के लिए नहीं कर सकते हैं उन्हें। एक फ़ंक्शन चलाने के लिए जो इंटरएक्टिव नहीं है, आप दबा सकते हैं M-:( eval-expression), फ़ंक्शन के नाम को दर्ज करें, जो किसी भी तर्क के लिए मानों द्वारा पालन किया जाता है जो इसे कोष्ठक में संलग्न हैं, और प्रेस करें RET:

M-: (name-of-function arg1 arg2 arg3) RET

यदि फ़ंक्शन को वर्तमान बफ़र पर संचालित करने के लिए नहीं माना जाता है, तो आप भी दर्ज कर सकते हैं

(name-of-function arg1 arg2 arg3)

में *scratch*बफर और प्रेस C-x C-e( eval-last-sexpबिंदु) के साथ समापन कोष्ठक के बाद तैनात।

एक फ़ंक्शन barको एक कमांड के रूप में उपलब्ध कराने के लिए आप इसे कस्टम इंटरैक्टिव फंक्शन ( foo) में निम्नानुसार लपेट सकते हैं:

(defun foo ()
  (interactive)
  (bar))

बेशक, यदि barआप एक या अधिक तर्क लेते हैं , तो आपको fooकाम को सही ढंग से करने के लिए उन्हें आपूर्ति करना होगा ।

यदि आप लोगों को "फ़ंक्शन" और "कमांड" का उपयोग करते हुए देख रहे हैं, तो यह संकेत कर सकता है (संदर्भ के आधार पर) कि वे अंतर्निहित अवधारणाओं के बीच अंतर के बारे में नहीं जानते हैं।


1 ध्यान दें कि मैं defunयहां बात कर रहा हूं । जैसा कि @Stefan टिप्पणियों में बताते हैं, कीबोर्ड मैक्रोज़ एक विशेष मामला है: उन्हें कमांड माना जा सकता है , लेकिन वे फ़ंक्शन नहीं हैं।


5
माइनर नाइटपिक: interactive"कॉल" को आमतौर पर घोषणा कहा जाता है (फ़ंक्शन स्वयं वास्तव में कुछ भी नहीं करता है)।
शोस्ती

5
@itsjeyd: वास्तव में, नहीं, ऐसे कमांड भी हैं जो कार्य नहीं हैं। यह कीबोर्ड मैक्रोज़ का मामला है । उदाहरण के M-: (commandp [?a]) RETलिए (correclty) आपको बताएगा कि [?a]यह एक कमांड है, लेकिन यह एक फ़ंक्शन नहीं है।
स्टीफन

@Stefan कि बाहर इशारा करने के लिए धन्यवाद। मैंने अपना उत्तर अपडेट कर दिया।
itsjeyd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.