2010-12-05 14 views
5

Jak zrobić typ lub obiekt wywoływalny w Clojure?Jak zrobić obiekt do wywołania w Clojure?

Na przykład, w jaki sposób można zdefiniować rekord Foo przy użyciu pojedynczej wartości :bar, którą można wywołać w celu wydrukowania tej wartości?

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

Odpowiedz

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

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

;; => Hello, world!

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

;; => "Hello, world!"

... Czy ten sposób jest dobry pomysł, to inna kwestia.


Records implementing IFn

(defrecord Foo [bar] 
    clojure.lang.IFn 
    (invoke [_] (println bar)) 
    (applyTo [this args] (clojure.lang.AFn/applyToHelper this args))) 
Powiązane problemy