[racket] One accessor for the same fields of different structs?

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Mon Nov 25 11:06:29 EST 2013

Or match and define-match and define/match if you wish to avoid writing selectors. 



On Nov 25, 2013, at 9:35 AM, "William J. Bowman" <wjb at williamjbowman.com> wrote:

> Ben,
> 
> I'm not sure what problem you're actually trying to solve, but you may want to look at
> 
> 0) struct super-type http://docs.racket-lang.org/reference/creatingmorestructs.html
> 1) generic interfaces http://docs.racket-lang.org/reference/struct-generics.html
> 2) racket objects http://docs.racket-lang.org/reference/mzlib_class.html
> 
> --
> 
> William J. Bowman
> Sent from my tablet device
> 
> 
> 
> -----Original Message-----
> From: Ben Duan <yfefyf at gmail.com>
> To: users <users at racket-lang.org>
> Sent: Mon, 25 Nov 2013 9:25 AM
> Subject: [racket] One accessor for the same fields of different structs?
> 
> Hi All,
> 
> If I have several structures, like the following:
> 
>    (struct customer (name age foo))
>    (struct student (name age bar))
> 
> I choose the same representation for the `name` and `age` fields which are
> `string?` and `natural-number/c`. So I think I could just define a `name`
> accessor for both `customer-name` and `student-name` to save some typing. I
> have to define the accesors by hand like:
> 
>    (define (name record)
>      (cond
>        ((customer? record) (customer-name record))
>        ((student? record) (student-name record))))
>    (define (age record)
>      (cond
>        ((customer? record) (customer-age record))
>        ((student? record) (student-age record))))
> 
> 1. It's much repetitive work. Is there any built-in way to do these things?
>    I think macro can do these. But I'm trying to avoid macros as much as I
> could, because I don't trust myself in designing macros.
> 
> 2. Is it good or bad style to use one accessor for different structs?
> 
> Thanks,
> Ben
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users



Posted on the users mailing list.