Допустим, у меня есть некоторый класс в Ракетка называется five%
:Установка приватные поля другого экземпляра объекта одного и того же класса определяется в Ракетка
(define five%
(class object%
(super-new)
(define internal 5)
(define/public (get-number)
internal)))
И скажем, я определил две пятерки:
(define f (new five%))
(define g (new five%))
Теперь как f
, так и g
имеют доступ к собственным internal
. Но позвольте сказать, что я хочу добавить функцию к five%
, называемому, скажем, change-other
, который принимает еще один объект five%
и изменяет его поле internal
. Сказать что-то вроде этого:
(define/public (change-other other)
(set-field! internal other 4))
Теперь, очевидно, я не могу это сделать, потому что internal
частное поле, и, следовательно, он не может получить доступ к любым другим экземплярам five%
.
Итак, возможно ли в Racket создать класс с частным полем, к которому могут быть доступны только другие экземпляры этого класса?