構造体の印刷方法を制御する方法はありますか?例えばラケット構造体の印刷方法
私は画像を含む透明構造体がある場合:
(struct photo (label image-data) #:transparent)
をしかし、私はimage-data
フィールドを印刷する必要はありません。
構造体の印刷方法を制御する方法はありますか?例えばラケット構造体の印刷方法
私は画像を含む透明構造体がある場合:
(struct photo (label image-data) #:transparent)
をしかし、私はimage-data
フィールドを印刷する必要はありません。
ベンの回答を少し伸ばしたいと思います。 gen:custom-write
とmake-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")
write
、display
、そしてあなたが
print
すべての仕事
はい! 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