2010-12-05 15 views
5

¿Cómo se hace un tipo u objeto invocable en Clojure?¿Cómo se hace un objeto invocable en Clojure?

Por ejemplo, ¿cómo podría definir un registro Foo tomando un solo valor :bar que podría llamarse para imprimir ese valor?

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

Respuesta

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

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

;; => Hello, world!

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

;; => "Hello, world!"

... Ya sea haciendo esto es una buena idea es otra cuestión.


Records implementing IFn

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