2012-08-15 11 views
16

मान लीजिए मेरे पास एक रिकॉर्ड है जो "फ़ंक्शन-जैसा" है, कम से कम इस अर्थ में कि यह एक ऑपरेशन का प्रतिनिधित्व करता है जिसे कुछ तर्कों पर लागू किया जा सकता है।आईएफएन लागू करने के लिए क्लोजर रिकॉर्ड के लिए यह अच्छा अभ्यास है?

मैं clojure.lang.IFn को लागू करने से यह एक समारोह के रूप में काम कर सकते हैं, कुछ की तरह:

(defrecord Func [f x] 
    clojure.lang.IFn 
    (invoke [this arg] 
     (f x arg)) 
    (applyTo [this args] 
     (apply f x args))) 

((->Func + 7) 1) 
=> 8 

(हाँ मुझे पता है कि मैं सिर्फ partial के एक अवर संस्करण reimplemented किया है .... यह सिर्फ एक उदाहरण है: -))

एक रिकॉर्ड बना रहा है clojure.lang.IFn एक अच्छा अभ्यास या नहीं?

इस दृष्टिकोण के लिए कोई समस्या है?

उत्तर

6

मुझे आश्चर्य है कि यह पहले से ही नहीं है। रिकॉर्ड्स "a complete implementation of a persistent map" होने चाहिए। तो अपने प्रश्न का उत्तर देने के लिए, मैं उम्मीद करता हूं कि यह इसकी चाबियों का एक कार्य हो, जैसा नक्शा है; कुछ और आश्चर्यजनक होगा।

+1

एक रिकॉर्ड 'clojure.lang.Associative' को लागू करने के लिए प्रतीत होता है लेकिन' clojure.lang.IFn' नहीं। तो आप खोजशब्द को देखने के लिए '(: कुछ रिकॉर्ड) 'कर सकते हैं लेकिन' (कुछ-रिकॉर्ड: x) ' – mikera

+0

सटीक रूप से नहीं। मैंने जांच की है लेकिन रिच से इस बारे में कुछ भी स्पष्ट नहीं देखा है। शायद यह सिर्फ एक निरीक्षण है। –

+0

+1 दिया गया क्योंकि @ मिकरा का सवाल रिकॉर्ड्स के प्रकारों के बारे में नहीं पूछता है। चूंकि रिकॉर्ड्स में मैप-जैसे सेमेन्टिक्स पहले से ही भ्रमित हो जाएंगे, क्योंकि इस समस्या के प्रकार इस प्रकार नहीं हैं। – ponzao

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

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