और उनका उपयोग किस लिए किया जा सकता है?
(interactive "p")
universal argument
सही से एक संख्यात्मक तर्क लेता है ? और सार्वभौमिक तर्क एक तरह से सिर्फ एक इंट है, तो पूंजी क्या करती (interactive "P")
है?
और उनका उपयोग किस लिए किया जा सकता है?
(interactive "p")
universal argument
सही से एक संख्यात्मक तर्क लेता है ? और सार्वभौमिक तर्क एक तरह से सिर्फ एक इंट है, तो पूंजी क्या करती (interactive "P")
है?
जवाबों:
इस बात पर विश्वास करना मुश्किल है कि लोगों ने आपको यहाँ 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
।
जब कच्चे उपसर्ग इंटरएक्टिव कोड "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
या नहीं)।
बस @ कौशलमोडी के उत्तर (और उपयोगी परीक्षण मामले) में थोड़ा और अधिक विवरण जोड़ने के लिए:
कच्ची दलील आपको दिए गए तर्कों universal-argument
और के बीच अंतर करने देती है digit-argument
।
एक संख्यात्मक उपसर्ग C-u
arg के साथ 4 (यानी C-4
) के उपसर्ग arg से सार्वभौमिक तर्क को अलग करने का कोई तरीका नहीं है । कच्चे तर्क के साथ ये अलग हैं: (4)
बनाम 4
।
साथ ही लागू होता है negative-argument
। एक कच्चे तर्क के रूप में आप के बीच अंतर कर सकते हैं C--
और C-- 1
: पहला आपको दे देगा -
जबकि दूसरा -1
। जब एक संख्यात्मक तर्क में परिवर्तित किया जाता है तो वे दोनों होंगे -1
।
तो एक कच्चे तर्क का उपयोग करने का लाभ यह है कि आप अधिक संभव मान देता है। आप ऐसे आदेश लिख सकते हैं जो तर्क निर्दिष्ट किए जाने के आधार पर अलग-अलग व्यवहार करते हैं।
एक उदाहरण के रूप में, के लिए डॉक्टर स्ट्रिंग पर एक नज़र डालें yank
। यह आदेश व्यवहार करता है C-u
और C-4
अलग ढंग से:
तर्क के रूप में सिर्फ क्यू के साथ, शुरुआत में बिंदु डालें, और अंत में चिह्नित करें। तर्क एन के साथ, Nth को सबसे हालिया हत्या पर लगाम कसें।
nil
होता है1
, लेकिन कभी भी लिपटेint
रहना एक अलिखित के लिए बेहतर होता हैint
। (जब तक मैं 15 अंक प्राप्त नहीं कर सकता, तब तक आगे नहीं बढ़ सकता)।