使用 Racket 创建一个新的 snip%

Lei*_*sen 5 graphics user-interface editor racket

我正在尝试在 DrRacket 的文本窗口中创建一个新的 GUI 元素,如图片或语法对象。据我所知,最标准的方法是使用snip%. 1

不幸的是,创建新片段的文档虽然全面,但有点难以理解,并留下了一些问题需要回答。

首先, asnip%和 a 有snip-class%什么区别?为什么要把它们分成两类,而不是简单地合并为一类?是因为多个 snips 会使用一个 snip 类吗?

第二关,什么是snip-reader<%>?不仅为什么它需要是一个单独的类,而且为什么应该安装提供它的模块?2如果它确实需要一个新的类,为什么不能直接引用它。为什么要经历构建然后解析形式的字符串的整个过程:"(lib ...)\n(lib ...)"

我的意思是,这种设计现在可能有任何原因,它可能只是旧 API 的残余。如果是这样,有没有人想过制作一个新的更一致的 API?或者,如果这种设计是有原因的,请您告诉我它是什么,因为文档似乎没有说清楚。

我的意思是,截至目前,我可以复制/粘贴文档中提供的关于创建新片段的示例。但是我很难理解这里的设计,所以我可以正确地使用它们。

1我知道还有其他方法可以做到,但我也想要交互式按钮等等。

2我知道它本身不需要作为库安装,但文档似乎强烈地推动你朝这个方向前进。