tkf*_*tkf 4 scheme racket data-structures
我想这样的代码:
(define-struct thing (a b c))
(define th (make-thing 1 2 3))
Run Code Online (Sandbox Code Playgroud)
打印这样的东西:
(make-thing 1 2 3)
Run Code Online (Sandbox Code Playgroud)
当我在DrScheme或MzScheme repl中键入"th"时.我在DrScheme中使用"非常大"的语言,输出样式设置为"构造函数".这就是我在DrScheme中得到的:
(make-thing ...)
Run Code Online (Sandbox Code Playgroud)
(我真的得到三个点)
在MzScheme:
#<thing>
Run Code Online (Sandbox Code Playgroud)
有几种方法可以做到这一点.最明显的是使用:
(define-struct thing (a b c) #:transparent)
Run Code Online (Sandbox Code Playgroud)
这使得结构可以进行打印输出的低级检查.另一种方法是使用您自己的打印机:
(define-struct thing (a b c)
#:property prop:custom-write
(lambda (thing port write?)
(fprintf port (if write? "{~s,~s,~s}" "{~a,~a,~a}")
(thing-a thing) (thing-b thing) (thing-c thing))))
Run Code Online (Sandbox Code Playgroud)
但请注意,"构造函数"输出样式尝试以不同方式编写某些内容.另请注意,您可以将这两者结合起来,使其具有自己的编写器以及透明.(使其透明化基本上使得任何代码都可以访问thing实例中的字段,例如,equal?可以深入研究它.)
最后,对于某些用途,更合适的设施是使用"预制"结构:
(define-struct thing (a b c) #:prefab)
Run Code Online (Sandbox Code Playgroud)
通常发生的是每个都define-struct生成一个新类型,即使已经定义了一个类型.但是使用预制结构就好像有一种类型预先存在,而你只是绑定一些函数(构造函数,谓词和访问器)来处理这种预先存在的类型.
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |