अच्छी तरह से लंबोदर किसी भी अन्य कार्य की परिभाषा की तरह ही नियमित रूप से कर सकते हैं:
(lambda ()
"I'm a docstring!"
(+ foo bar))
तो आप उपयोग कर सकते हैं:
(let ((foo 1)
(bar 2))
`(lambda ()
,(format "Function which sums foo=%s and bar=%s" foo bar)
(+ foo bar)))
आप एक अनाम फ़ंक्शन पर एक डॉकस्ट्रिंग क्यों चाहते हैं, यह एक और सवाल है, जो आपके द्वारा लिए गए दृष्टिकोण को प्रभावित कर सकता है।
उदाहरण के लिए, यदि आप इसे किसी कुंजी से बांधने की योजना बना रहे हैं और आप C-h k
उस सहायता को प्रदर्शित करना चाहते हैं, तो आप इस दृष्टिकोण का उपयोग कर सकते हैं, लेकिन निश्चित रूप से मदद अभी भी फ़ंक्शन ऑब्जेक्ट को ही प्रदर्शित करेगी (इसमें शामिल है), जो ऐसा नहीं है महान; फिर भी आप ऐसा कर सकता है और आप चाहते हैं (यह भी) अच्छी तरह से स्वरूपित संस्करण देखें:
(global-set-key
(kbd "C-c a")
(let ((foo 1)
(bar 2))
`(lambda ()
,(format "Function which sums foo=%s and bar=%s" foo bar)
(interactive)
(+ foo bar))))
आप एक प्रतीक का उपयोग करना पसंद कर सकते हैं, हालाँकि। आप एक अनाम फ़ंक्शन को एक असंबद्ध प्रतीक के साथ जोड़ सकते हैं , और उसी नाम के किसी भी अन्य प्रतीकों के साथ संघर्ष के बारे में चिंता न करें। यह मदद क्लीनर बनाता है, क्योंकि यह फ़ंक्शन ऑब्जेक्ट के बजाय प्रतीक नाम प्रदर्शित करेगा। इस उदाहरण में हमारे पास लंबोदर defalias
रूप में इसे एम्बेड करने के बजाय डॉकस्ट्रिंग पास करने का विकल्प है ।
(global-set-key
(kbd "C-c a")
(let ((foo 1)
(bar 2))
(defalias (make-symbol "a-foo-bar-function")
(lambda ()
(interactive)
(+ foo bar))
(format "Function which sums foo=%s and bar=%s" foo bar))))
या (और यह बहुत ही एक ही बात है) आप बिना अंक के प्रतीक पर कब्जा कर सकते हैं, और सीधे अपने मूल कोड के अनुसार प्रतीक संपत्ति सेट कर सकते हैं:
(global-set-key
(kbd "C-c a")
(let ((foo 1)
(bar 2)
(sym (make-symbol "a-foo-bar-function")))
(put sym 'function-documentation
(format "Function which sums foo=%s and bar=%s" foo bar))
(defalias sym
(lambda ()
(interactive)
(+ foo bar)))))
एक साइड नोट के रूप में, ध्यान रखें कि यह फ़ंक्शन केवल आपके लाइब्रेरी के लिए foo
और bar
यदि आप उपयोग कर रहे हैं, तो लेट-बाउंड मानों को समेटने जा रहे हैं lexical-binding: t
। यदि फू और बार गतिशील रूप से बंधे होते हैं, तो मैंने जो डॉकस्ट्रिंग्स उत्पन्न किए हैं, वे संभवतः रन-टाइम पर सटीक नहीं होंगे। हम वास्तव में गतिशील docstrings के साथ उस स्थिति को पूरा कर सकते हैं , हालांकि। जानकारी नोड का (elisp) Accessing Documentation
कहना है documentation-property
:
यदि संपत्ति का मूल्य 'शून्य' नहीं है, तो एक स्ट्रिंग नहीं है, और किसी फ़ाइल में पाठ का संदर्भ नहीं देता है, तो यह स्ट्रिंग प्राप्त करने के लिए लिस्प अभिव्यक्ति के रूप में मूल्यांकन किया जाता है।
इसलिए किसी भी प्रतीक-आधारित दृष्टिकोण के साथ, हम प्रलेखन फॉर्म को उद्धृत कर सकते हैं ताकि कॉल समय पर इसका मूल्यांकन किया जा सके:
(defalias (make-symbol "a-foo-bar-function")
(lambda ()
(interactive)
(+ foo bar))
'(format "Function which sums foo=%s and bar=%s" foo bar))