2010-12-05 19 views
5

क्लोजर में आप कॉल करने योग्य प्रकार या ऑब्जेक्ट कैसे बनाते हैं?क्लोजर में आप कॉल करने योग्य ऑब्जेक्ट कैसे बनाते हैं?

उदाहरण के लिए, मैं एक रिकॉर्ड Foo रिकॉर्ड को कैसे परिभाषित कर सकता हूं :bar जिसे उस मान को मुद्रित करने के लिए बुलाया जा सकता है?

user=> (def foo (Foo. "Hello world")) 
user=> (foo) 
Hello World 
user=> (:bar foo) 
"Hello World" 

उत्तर

9
(defrecord Foo [bar] 
    clojure.lang.IFn 
    (invoke [_] (println bar))) 

((Foo. "Hello, world!"))

;; => Hello, world!

(:bar (Foo. "Hello, world!"))

;; => "Hello, world!"

... चाहे यह कर एक अच्छा विचार है एक और सवाल है।


Records implementing IFn

(defrecord Foo [bar] 
    clojure.lang.IFn 
    (invoke [_] (println bar)) 
    (applyTo [this args] (clojure.lang.AFn/applyToHelper this args))) 
संबंधित मुद्दे