2015-06-15 7 views
6

मैं थोड़ा सा चिंतित हूं कि कुछ अंतर्निर्मित क्लोजर फ़ंक्शंस में मुझे असंगत व्यवहार होने लगता है। एक संदर्भ जहां v nil हो सकता है मेंक्लोजर: एक मोनैड-जैसे तरीके से एनपीई से बचने के लिए बेवकूफ/साफ तरीका

(let [kwns (namespace (keyword v))] 
    ...) 

:

मैं यह करने की कोशिश कर रहा हूँ। keyword फ़ंक्शन काम करता है जैसा कि मैं अपेक्षा करता हूं (nil देता है), लेकिन नेमस्पेस एनपीई फेंकता है।

मैं इस धारणा के तहत था कि क्लोजर में अक्सर मोनैड का उपयोग नहीं किया जाता था क्योंकि नील-पनिंग मूर्खतापूर्ण रूप प्रतीत होता है (this article लंबाई पर चलता है)।

मुझे उम्मीद थी कि एनएनई फेंकने के लिए क्रेन बाहर निकल जाएंगे। जब यह असंगतता उसके बदसूरत सिर को उठाती है, तो कोड को साफ रखने के लिए अनुशंसित तरीका क्या है .... मिर्च nil मेरे कोड में चेक उत्तर मैं निश्चित रूप से चाहता हूं।

उत्तर

10

some-> आपके लिए काम करेगा?

user=> (doc some->) 
------------------------- 
clojure.core/some-> 
([expr & forms]) 
Macro 
    When expr is not nil, threads it into the first form (via ->), 
    and when that result is not nil, through the next etc 
nil 
user=> (some-> nil keyword namespace) 
nil 
user=> (some-> "user/a" keyword namespace) 
"user" 
+2

बिल्कुल सही ... मुझे पता था कि कुछ होना था! –

संबंधित मुद्दे