2010-12-05 6 views
5

Wie machen Sie einen aufrufbaren Typ oder ein Objekt in Clojure?Wie können Sie in Clojure ein aufrufbares Objekt erstellen?

Zum Beispiel, wie könnte ich einen Datensatz Foo mit einem einzigen Wert , die zum Ausdrucken dieses Werts aufgerufen werden könnte definieren?

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

Antwort

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

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

;; => Hello, world!

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

;; => "Hello, world!"

... Ob dies zu tun ist eine gute Idee ist eine andere Frage.


Records implementing IFn

(defrecord Foo [bar] 
    clojure.lang.IFn 
    (invoke [_] (println bar)) 
    (applyTo [this args] (clojure.lang.AFn/applyToHelper this args))) 
Verwandte Themen