Re: equal? with classes and contracts
On Nov 30, 2010, at 10:32 PM, Nadeem Abdul Hamid wrote:
> I think something like this has come up before but I can't find the
> thread. Given:
>
> (define A%
> (class object% (inspect #f) (super-new)))
> (define/contract B%
> (class/c )
> (class object% (inspect #f) (super-new)))
>
> How can I get around the problem that:
> (equal? (new A%) (new A%))
> but
> (not (equal? (new B%) (new B%)))
>
> I want to be able to compare objects of the same contracted class for
> structural equality.
This is indeed a problem with the current implementation of class/c. I'm currently working on
reimplementing parts of our contract system to take advantage of the new chaperone and impersonator
wrappers. Once class/c is rewritten, I believe that this problem will just go away, since all the
information about which inspectors have access (or that all inspectors have access, in this case) should
be preserved. Feel free to submit a bug in the meantime, so that I'll have a reminder to check that this has
indeed been solved once I've finished.
> And another question: is there something similar to struct-copy for
> objects? Or a way to easily clone them?
No, though this has been a requested feature before; I know that Ryan has done some work in this area before,
but I haven't had a chance at incorporating what he's done, or something similar, into the core class
(Continue reading)