> You could also use reify:
> 
> (defn make-foo [s] 
>   (reify clojure.lang.IFn 
>     (invoke [this] (str "Hello, " s))))
> 
> ((make-foo "RJ"))
> "Hello, RJ"
> 
> I have to admit, though, that I'm unclear on the relative merits of defrecord 
> vs. reify. Anyone want to comment?
> 
> Cheers,
> -Michael Nygard

defrecord gives you a lot of stuff, even before you start to add interfaces / 
protocols:

(defrecord Foo [a])

(ancestors Foo)
=> #{clojure.lang.IPersistentCollection clojure.lang.Seqable 
clojure.lang.ILookup clojure.lang.Associative clojure.lang.IKeywordLookup 
java.util.Map clojure.lang.IPersistentMap clojure.lang.IObj 
clojure.lang.Counted clojure.lang.IMeta java.lang.Object java.io.Serializable 
java.lang.Iterable}

If you need some of that stuff, defrecord is more appropriate. If you need only 
a named class + IFn, use deftype. If you need only IFn, use reify.

Stu


Stuart Halloway
Clojure/core
http://clojure.com

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to