Да для custom-write
.Поскольку gen:custom-write
является обёрткой вокруг prop:custom-write
, возможно, что класс реализует это через интерфейс.
printable<%>
Интерфейс реализует prop:custom-write
, чтобы разрешать такие вещи:
#lang racket
(define fish%
(class* object% (printable<%>)
(super-new)
(define/public (custom-print out depth)
(fprintf out "><,`>"))
(define/public (custom-write out)
(fprintf out "><,`>"))
(define/public (custom-display out)
(fprintf out "><,`>"))))
Используя его:
> (new fish%)
><,`>
Это возможно, потому что *Интерфейс 1023 * использует форму interface*
для наследования от свойства struct-type prop:custom-write
.Однако это не относится ко всем универсальным интерфейсам, только к тем, которые соответствуют свойствам struct-type-properties.
PS Не стоит слишком беспокоиться о документации, в которой говорится, что prop:custom-write
isосуждается.«Пользователям» не обязательно использовать его, поскольку для структур существует gen:custom-write
, а для классов printable<%>
.Он устарел как интерфейс, но как реализация не уходит.Таким образом, «безопасно» использовать, не беспокоясь.