case
दस्तावेज़ कहते हैंक्या जावा एनम के साथ क्लोजर के केस फॉर्म का उपयोग करना संभव है?
cond और condp के विपरीत, मामला एक निरंतर समय प्रेषण करता है ... निरंतर अभिव्यक्ति की सभी प्रकार की आवश्यक मामले में स्वीकार्य हैं।
मैं जावा enums पर मिलान करने के लिए case
के स्थिर समय प्रेषण से लाभ उठाना चाहता हूं। जावा के switch
बयान enums के साथ अच्छी तरह से काम करता है, लेकिन Clojure में निम्नलिखित कर रही: में
(defn foo [x]
(case x
java.util.concurrent.TimeUnit/MILLISECONDS "yes!"))
(foo java.util.concurrent.TimeUnit/MILLISECONDS)
परिणाम: IllegalArgumentException No matching clause: MILLISECONDS
case
में समर्थित नहीं enums रहे हैं? क्या मुझसे कुछ गलत हो रही है? क्या मुझे cond
का सहारा लेना चाहिए या क्या कोई बेहतर समाधान है?
cemerick एक लेख और के लिए वैकल्पिक हल है यह http://cemerick.com/2010/08/03/enhancing-clojures-case-to-evaluate-dispatch-values/ –
धन्यवाद, आप दोनों! दोनों औपचारिक समाधान (मैं इसे मैक्रो में उपयोग कर रहा हूं इसलिए पठनीयता एक मुद्दा नहीं है) और सेमेरिक का समाधान अच्छी तरह से काम करता है। – pron
मैं बहुत परेशान था: स्पष्ट रूप से cemerick का मामला + enums के लिए काम नहीं करता है: '(मामला + java.util.concurrent.TimeUnit/MINUTES java.util.concurrent.TimeUnit/MINUTES" हाँ! "); CompilerException java.lang.RuntimeException: ऑब्जेक्ट को कोड में एम्बेड नहीं किया जा सकता है। (लेकिन औपचारिक समाधान स्पष्ट रूप से करता है) – pron