Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String representation of custom data in Racket

I like how you can retain representation in transparent structs:

(struct posn (x y)
        #:transparent)

> (posn 1 2)
(posn 1 2)

But is there a way to customize it? Like in Python?

like image 516
Vladimir Keleshev Avatar asked Aug 12 '11 14:08

Vladimir Keleshev


1 Answers

Check out the prop:custom-write property here. Here's a simple implementation:

(struct pr (x y)
  #:transparent
  #:property prop:custom-write (λ (v p w?)
                                 (fprintf p "<~a,~a>" (pr-x v) (pr-y v))))

> (pr 1 2)
<1,2>

Note that this works with non-#:transparent structures as well.

like image 169
Sam Tobin-Hochstadt Avatar answered Sep 29 '22 21:09

Sam Tobin-Hochstadt