मैंने क्लोजरस्क्रिप्ट पर डेविड नोलन की बात देखी जहां वह आईएफएन को रेगेक्सपी तक बढ़ाता है और ताकि हम मैचों की जांच के लिए स्ट्रिंग पर एक फ्यूजक्शन के रूप में रेगेक्स शाब्दिक कह सकें।विस्तारित प्रकार का उपयोग करके क्लोजर के आईएफएन का विस्तार क्यों नहीं कर सकता?
मैंने नियमित क्लोजर में स्ट्रिंग्स के साथ कुछ ऐसा करने की कोशिश की, लेकिन मुझे यह अपवाद मिलता है। मुझे लगता है कि आईएफएन जावा में लिखा गया इंटरफ़ेस है लेकिन कार्यान्वयन CLojrue फ्रंट में कैसे काम करता है।
(extend-type java.lang.String
#_=> clojure.lang.IFn
#_=> (-invoke
#_=> ([this index]
#_=> (get (seq this) index))))
IllegalArgumentException interface clojure.lang.IFn is not a protocol clojure.core/extend (core_deftype.clj:742)
इस मामले में मेरी सबसे अच्छी शर्त एक नया प्रकार होगा जो सिर्फ java.lang.String को लपेटता है और इसे छोड़कर सभी कॉल को पास करता है- Ivn Ivn को छोड़कर और लागू करता है? –
लेकिन 'क्लोजर' में, कीवर्ड फ़ंक्शंस जैसे व्यवहार कर सकते हैं उदा। '(: एक {: एक 36})'। यह कैसे काम करता है? – viebel
कीवर्ड जावा में लागू किए गए हैं, इसलिए वे आईएफएन इंटरफ़ेस से प्राप्त हो सकते हैं, https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Keyword.java –