एक कच्चा उपसर्ग तर्क क्या है? (इंटरैक्टिव में पूंजी पी)


9

और उनका उपयोग किस लिए किया जा सकता है?

(interactive "p")universal argumentसही से एक संख्यात्मक तर्क लेता है ? और सार्वभौमिक तर्क एक तरह से सिर्फ एक इंट है, तो पूंजी क्या करती (interactive "P")है?

जवाबों:


11

इस बात पर विश्वास करना मुश्किल है कि लोगों ने आपको यहाँ Emacs के स्वयं के विवरणों के लिंक दिए बिना यह वर्णन किया:

"Emacs पूछो!":, C-h i एक मैनुअल चुनेंi prefix argument RET,।

संक्षेप में, हालांकि यह यहां अन्य उत्तरों द्वारा पर्याप्त रूप से कहा गया है, और मैनुअल में विस्तार से वर्णित है:

  • "कच्चे" उपसर्ग आर्ग विभिन्न प्रकार के लिस्प मूल्यों प्रदान करता है, और विशेष रूप से अलग करता है या नहीं, उपयोगकर्ता वास्तव में इस्तेमाल किया (किसी भी तरह के) एक उपसर्ग तर्क।

    यह का उपयोग करना, एक कार्यक्रम भेद कर सकते हैं उपयोगकर्ता {एक का उपयोग किया है कि क्या -, M--, C--} या {की एक M-- 1, C-- 1, C-u -1} (जो दोनों के का एक ही संख्यात्मक उपसर्ग मूल्य है -1), और भेद चाहे रों? वह इस्तेमाल किया C-u C-uया में से एक { M-16, C-16, C-u 16} (दोनों का संख्यात्मक मान 16 है) - बहुत सारे अन्य अंतरों के बीच।

    लेकिन इस तरह का सबसे महत्वपूर्ण अंतर nilगैर-बनाम है nil: कई कमांड अलग-अलग कार्य करते हैं जो इस बात पर निर्भर करता है कि उपयोगकर्ता एक उपसर्ग का उपयोग करता है।

  • "सांख्यिक" उपसर्ग आर्ग वास्तव में सिर्फ मान जो फ़ंक्शन है prefix-numeric-valueरिटर्न जब कच्चे उपसर्ग आर्ग के लिए आवेदन किया। IOW, यह वास्तविक कच्चे उपयोगकर्ता के संपर्क से एक पूर्णांक तक मानचित्रण के रूप में सबसे अच्छा माना जाता है।

    यह आपको बता सकता है नहीं उपयोगकर्ता वास्तव में एक उपसर्ग तर्क का इस्तेमाल किया है कि क्या क्योंकि कोई उपसर्ग तर्क के डिफ़ॉल्ट पूर्णांक 1 के नक्शे, बस के रूप में के उपयोग करता है C-u 1, M-1या C-1


9

जब कच्चे उपसर्ग इंटरएक्टिव कोड "P" का उपयोग किया जाता है, तो तर्क को पारित कर दिया जाता है क्योंकि यह "p"arg को एक संख्या में परिवर्तित करता है।

नीचे दिए गए योगों का मूल्यांकन करने के बाद, कोशिश करें C-u M-x my/fn-with-num-argऔर फिर C-u M-x my/fn-with-raw-argअंतर देखने के लिए क्योंकि C-uसूची तर्क पास करता है (4)

(defun my/debug-fn (arg)
  (let ((msg))
    (if (numberp arg)
        (setq msg (format "Argument is number %s. " (pp arg)))
      (setq msg "Argument is not a number. "))
    (if (listp arg)
        (setq msg (concat msg (format "Arg is %s." (pp arg))))
      (setq msg (concat msg "Argument is not a list.")))
    (message msg)))

(defun my/fn-with-num-arg (arg)
  (interactive "p")
  (my/debug-fn arg))
;; Result of C-u M-x my/fn-with-num-arg :
;; Argument is number 4. Argument is not a list.

(defun my/fn-with-raw-arg (arg)
  (interactive "P")
  (my/debug-fn arg))
;; Result of C-u M-x my/fn-with-raw-arg :
;; Argument is not a number. Arg is (4)
;; .

इसके अलावा तर्क 1संख्यात्मक तर्क ( "p") के लिए nilया ()कच्चे तर्क के लिए चूक ( ) के लिए चूक करता है "P"

मेरे कुछ सेंट: कई बार, यह तय करने का कारक कि क्या उपयोग करना है "p"या "P"क्या आप चाहते हैं कि डिफ़ॉल्ट तर्क हो 1या nil

;; Result of M-x my/fn-with-num-arg :
;; Argument is number 1. Argument is not a list.

;; Result of M-x my/fn-with-raw-arg :
;; Argument is not a number. Arg is nil.

धन्यवाद। मुझे लगता है कि कभी-कभी इसे प्राप्त करना बेहतर nilहोता है 1, लेकिन कभी भी लिपटे intरहना एक अलिखित के लिए बेहतर होता है int। (जब तक मैं 15 अंक प्राप्त नहीं कर सकता, तब तक आगे नहीं बढ़ सकता)।
24HrRevengeTherapist

@ 24HrRevengeTherapist: बस अप-वोटेड यस ', आपको मैजिक 15 पॉइंट थ्रेसहोल्ड से पार ले जाएगा। बाहर जाओ और आइटम है कि आप मदद पर कुछ मतदान कर!
दान

यह बिना लपेटे हुए चींटियों के बारे में नहीं है। यह पूरी तरह से चींटियों के बारे में नहीं है। और +1 से @kaushalmodi पर जोर देने के लिए कि आप यह बता सकते हैं कि क्या उपयोगकर्ता ने उपसर्ग arg का उपयोग केवल कच्चे arg का उपयोग करके किया था (यह जाँच कर कि क्या मूल्य है nilया नहीं)।
ड्रू

7

बस @ कौशलमोडी के उत्तर (और उपयोगी परीक्षण मामले) में थोड़ा और अधिक विवरण जोड़ने के लिए:

कच्ची दलील आपको दिए गए तर्कों universal-argumentऔर के बीच अंतर करने देती है digit-argument

एक संख्यात्मक उपसर्ग C-uarg के साथ 4 (यानी C-4) के उपसर्ग arg से सार्वभौमिक तर्क को अलग करने का कोई तरीका नहीं है । कच्चे तर्क के साथ ये अलग हैं: (4)बनाम 4

साथ ही लागू होता है negative-argument। एक कच्चे तर्क के रूप में आप के बीच अंतर कर सकते हैं C--और C-- 1: पहला आपको दे देगा -जबकि दूसरा -1। जब एक संख्यात्मक तर्क में परिवर्तित किया जाता है तो वे दोनों होंगे -1

तो एक कच्चे तर्क का उपयोग करने का लाभ यह है कि आप अधिक संभव मान देता है। आप ऐसे आदेश लिख सकते हैं जो तर्क निर्दिष्ट किए जाने के आधार पर अलग-अलग व्यवहार करते हैं।

एक उदाहरण के रूप में, के लिए डॉक्टर स्ट्रिंग पर एक नज़र डालें yank। यह आदेश व्यवहार करता है C-uऔर C-4अलग ढंग से:

तर्क के रूप में सिर्फ क्यू के साथ, शुरुआत में बिंदु डालें, और अंत में चिह्नित करें। तर्क एन के साथ, Nth को सबसे हालिया हत्या पर लगाम कसें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.