I think you have to define your specific certain-class-equal? So does record-type. 2014年11月10日 下午8:58于 "Jan Nieuwenhuizen" 写道: > Hi, > > In the example below, my implementation of equal? is only being > used if both types are the same. That surprised me; the manual > says equal? becomes a generic and for normal generics this works > as I expect. > > How do I get the magic equal? to do what show the same result as the > simple generic type-equal? > > And also, do we want such surprises? > > Greetings, > Jan > > (read-set! keywords 'prefix) > (use-modules (oop goops)) > > (define-class () > (name :accessor .name :init-value #f :init-keyword :name)) > > (define-method (equal? (a ) (b )) > (display "equal?\n") > (eq? (.name a) (.name b))) > > (define-method (equal? (a ) (b )) > (display "equal?\n") > (eq? (.name a) b)) > > (define-method (type-equal? (a ) (b )) > (display "equal?\n") > (eq? (.name a) b)) > > (format #t "equal?: ~a\n" (equal? (make :name 'a) (make > :name 'a))) > (newline) > (format #t "equal?: ~a\n" (equal? (make :name 'a) 'a)) > (newline) > (format #t "type-equal?: ~a\n" (type-equal? (make :name 'a) 'a)) > (newline) > > > -- > Jan Nieuwenhuizen | GNU LilyPond http://lilypond.org > Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.nl > >