2016-09-20 16 views
2

構造体の印刷方法を制御する方法はありますか?例えばラケット構造体の印刷方法

私は画像を含む透明構造体がある場合:

(struct photo (label image-data) #:transparent) 

をしかし、私はimage-dataフィールドを印刷する必要はありません。

答えて

4

ベンの回答を少し伸ばしたいと思います。 gen:custom-writemake-constructor-style-printerを組み合わせて、構造体の印刷を大幅に簡単にすることもできます。この関数は、印刷、記述、引用深度、および出力ポートの違いを処理します。彼の例を拡張

は与える:今すぐ

#lang racket 
(require pict 
     racket/struct) 

(struct photo (label image-data) 
    #:transparent 
    #:methods gen:custom-write 
    [(define write-proc 
    (make-constructor-style-printer 
     (lambda (obj) 'photo) 
     (lambda (obj) (list (photo-label obj)))))]) 

(displayln (photo "fish" (standard-fish 100 100))) 
;; Prints #<photo: fish> 

(println (photo "fish" (standard-fish 100 100))) 
;; Prints (photo "fish") 

writedisplay、そしてあなたが

を期待するよう printすべての仕事
3

はい! gen:custom-write汎用インターフェースを使用してください。

#lang racket 
(require pict) 

(struct photo (label image-data) 
    #:transparent 
    #:methods gen:custom-write 
    [(define (write-proc photo-val output-port output-mode) 
    (fprintf output-port "#<photo:~a>" (photo-label photo-val)))]) 

(photo "fish" (standard-fish 100 100)) 
;; Prints "#<photo:fish>" 

write-procの最初の引数は、印刷される構造体です。 2番目の引数は、印刷先のポートです。 3番目の引数は、コンテキストが値をどのように出力するかを示しています。ドキュメントを参照してください。 http://docs.racket-lang.org/reference/Printer_Extension.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._gen~3acustom-write%29%29

関連する問題