[racket] One accessor for the same fields of different structs?
No need for a macro here, you simply need to define a common parent struct
`person', and derive `customer' and `student' from this struct:
(struct person (name age))
(struct customer person (foo))
(struct student person (bar))
(person-name (customer "Joe" 34 'foo)) ; -> "Joe"
The parent struct name must be given right after the struct name of the
child.
Laurent
On Mon, Nov 25, 2013 at 3:20 PM, Ben Duan <yfefyf at gmail.com> wrote:
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20131125/e04b330f/attachment.html>