(or (:key hash) default)
और (:key hash default)
के बीच एक महत्वपूर्ण अंतर यह तथ्य है कि पूर्व में default
का मूल्यांकन केवल आवश्यक है। बाद के मामले में इसका हमेशा मूल्यांकन किया जाता है। इसलिए default
का मूल्यांकन महंगा होने पर आपको or
का उपयोग करना चाहिए।
एक और अंतर तब स्पष्ट हो जाता है जब आपके हैश में बूलियन संदर्भ में गलत होते हैं। ऐसे मानों के मामलों में (or (:key hash) default)
का मूल्यांकनया nil
के बजाय default
पर किया जाएगा, जो आप उम्मीद करते हैं। or
अभिव्यक्ति के विपरीत, (:key hash default)
सही परिणाम देगा। साइड नोट के रूप में, nil
को हैश में मानों के रूप में संग्रहीत करने से पहले दो बार सोचें।
ठीक है, वे महत्वपूर्ण अंतर थे। अब चलो नाबालिगों के लिए चलो।
(or (:title opts) "Default title")
;; Redacted for the sake of brevity.
(let* [x (:title opts)]
(if x
x
"Default title"))
यकीनन करने के लिए पाठक द्वारा विस्तार किया गया है, यह कम कुशल है की तुलना करने के लिए बस किसी भी मानक के बिना मूल्यांकन
(:title opts "Default title")
बेशक
यह अनुमान लगाने के लिए अंतर नहीं है कठिन है गति, हालांकि मुझे विश्वास है कि यह मामूली होना चाहिए।
दूसरी तरफ, पहली नज़र में (or (:key hash) :default)
किसी व्यक्ति के लिए (:key hash :default)
idiom पर उपयोग नहीं किया जाने वाला आसान समझना प्रतीत होता है। अन्य भाषाओं से आने वाले प्रोग्रामर पर विचार करें। रूबी में उदाहरण के लिए हैश का एक गैर विद्यमान तत्व से निपटने के लिए ठेठ दृष्टिकोण
val = hash[:key] || :default
इसलिए है, पहली अभिव्यक्ति पार्स करना अधिक आसान मनुष्य कुछ Clojure के मुहावरों के आदी नहीं द्वारा हो सकता है।
आप '(विकल्प प्राप्त करें: शीर्षक "डिफ़ॉल्ट शीर्षक") का भी उपयोग कर सकते हैं। – ponzao
@ponzao जो भी बेहतर हो सकता है क्योंकि 'get' 'NullPointerException' को फेंक नहीं देगा यदि नक्शा शून्य है। यह या तो निर्दिष्ट होने पर 'शून्य' या डिफ़ॉल्ट मान वापस कर देगा। –
@IvanKoblik '(शीर्षक शीर्षक" डिफ़ॉल्ट ") 'ठीक काम करता है। –