我正在寻找规范方法来指定自定义方法以输出Racket对象的字段。换句话说,我正在寻找Java的toString
方法的Racket等效项(如果存在)。
我知道对于结构,可以使用gen:custom-write
来指定write-proc
函数(source)。类有类似的东西吗?
答案 0 :(得分:2)
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%)
><,`>
这是可能的,因为printable<%>
接口使用interface*
形式来继承prop:custom-write
的struct-type属性。但是,并非所有通用接口都是如此,只是与struct-type-properties相对应的那些接口。