我在Guile Scheme 2.2.3中使用GOOPS。如果我的代码如下:
(use-modules (oop goops))
(define-class <vec3> ()
(e0 #:init-value 0.0 #:init-keyword #:e0)
(e1 #:init-value 0.0 #:init-keyword #:e1)
(e2 #:init-value 0.0 #:init-keyword #:e2))
(define (make-point x y z)
(make <vec3> #:e0 x #:e1 y #:e2 z))
当我在REPL中使用(make-point)
并询问返回的值时,它看起来像这样:
scheme@(guile-user)> (define p0 (make-point 1 2 3))
scheme@(guile-user)> p0
$1 = #<<vec3> 556b26c087b0>
我是否可以通过某种方式覆盖Guile REPL使用的对象打印,以便我可以很好地打印p0
(比如说)字段?
答案 0 :(得分:2)
Guile GOOPS似乎提供了display
和write
的原始通用方法。所以你需要做的就是把它们专门化。
使用此功能,您可以编写write
这样的内容:
(define-method (write (o <vec3>) out)
(display "#<vec3 " out)
(display (slot-ref o 'e0) out)
(display ">" out)
(newline out))
注意:Guile的REPL使用write
程序打印评估结果。
display
也是如此。