On Wed, Jan 26, 2011 at 10:58 AM, Shantanu Kumar
<kumar.shant...@gmail.com> wrote:
> Hi,
>
> I have created some 'deftype' objects and 'extend'ed
> clojure.lang.ILookup to them to make them behave like maps. How can I
> get the clojure.pprint/pprint to pretty-print them like maps?

A deftype can override toString like this:

user=> (deftype Foo [n]
  java.lang.Object
    (toString [this] (str "Foo<" n ">")))
user.Foo
user=> (Foo. 3)
#<Foo Foo<3>>
user=>

It still gets printed the way generic objects normally do, though:
#<Classname resultOfCallingToString>.

Fortunately, pprint lets you override this behavior by adding methods
to a multimethod called *simple-dispatch*:

user=> (defmethod clojure.contrib.pprint/*simple-dispatch* Foo [x]
(print (.toString x)))
#<MultiFn clojure.lang.MultiFn@795f24>
user=> (Foo. 3)
Foo<3>

-- 
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