gen:custom-write的球拍类

时间:2019-02-23 17:21:13

标签: racket

我正在寻找规范方法来指定自定义方法以输出Racket对象的字段。换句话说,我正在寻找Java的toString方法的Racket等效项(如果存在)。

我知道对于结构,可以使用gen:custom-write来指定write-proc函数(source)。类有类似的东西吗?

1 个答案:

答案 0 :(得分:2)

custom-write是。由于gen:custom-writeprop: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相对应的那些接口。