जब तक आप @legoscia द्वारा सुझाए गए सामान्य लिस्प एक्सटेंशन का उपयोग करते हैं, तब तक आपको यह जांचने की आवश्यकता है कि क्या वैकल्पिक तर्क निर्दिष्ट किया गया था। ध्यान दें कि आपको वास्तव में let
यहां उपयोग करने की आवश्यकता नहीं है। यह मेरे लिए अधिक मुहावरेदार लगता है:
(defun command (a &optional b)
(or b (setq b default))
(command-body a b))
जैसा कि टिप्पणियों में सुझाया गया है, का उपयोग unless
करना बेहतर हो सकता है or
:
(defun command (a &optional b)
(unless b (setq b default))
(command-body a b))
टिप्पणियों से भी: let
मूल सवाल के रूप में अधिक शुद्ध कार्यात्मक शैली का उपयोग करना होगा , लेकिन आपको अलग-अलग चर नामों की आवश्यकता नहीं है:
(defun my-command (a &optional b)
(let ((b (or b default)))
(command-body a b)))
बेशक, अगर वैकल्पिक पैरामीटर केवल एक बार आप इसे करना चाहिए एक बार जरूरत है:
(defun my-command (a &optional b)
(command-body a (or b default)))
setq
"प्योर" बूलियन फॉर्म में इस्तेमाल करना अच्छा स्टाइल हैor
। मेरी रायwhen
में निश्चित रूप से यहां अधिक उपयुक्त है, लेकिन आम तौर परlet
स्थानीय बाइंडिंग को स्थापित करने या बदलने के लिए पसंद की अभिव्यक्ति है। IOW, मूल कोड मुझे बहुत अच्छा लगता है।