我正在尝试在DrRacket的文本窗口中创建一个新的GUI元素,如picts或语法对象。据我所知,最常见的做法是使用snip%
。 1
不幸的是,creating new snips的文档虽然全面,但有点难以理解,还有一些问题需要解答。
对于初学者,snip%
和snip-class%
之间有什么区别?为什么这些需要分成两个类,而不是简单地组合成一个类?是因为多个剪辑会使用一个剪辑类吗?
第二关,什么是snip-reader<%>
?不仅为什么它需要成为一个单独的类,但为什么提供它的模块应该安装? 2 如果它确实需要是一个新的类,为什么它只是它只是直接提到。为什么要经历构建然后解析表单字符串的整个过程:"(lib ...)\n(lib ...)"
?
我的意思是,现在可能有任何理由进行此设计,它可能只是旧API的残余。如果是这样,有没有人想过制作一个新的更一致的API?或者,如果有这种设计的原因,你可以告诉我它是什么,因为文档似乎没有说清楚。
我的意思是,截至目前,我可以复制/粘贴sample given in the docs以创建新剪辑。但是我很难理解这里的设计,所以我可以正确使用它们。
1 我知道还有其他方法可以做到,但我也希望有交互式按钮等等。
2 我知道它本身并不需要作为库安装,但文档似乎强烈推动你朝这个方向发展子>
答案 0 :(得分:0)
好的,我想我终于找到了答案。广义而言:
snip%
类包括绘制剪辑的方法,告诉编辑器为图片预留多少空间,以及处理鼠标点击等事件。
接下来,snip-class%
类用于编码和解码剪辑。这必须是一个单独的类,因为当保存到文件时,编辑器需要编码它是什么类型的剪辑,并且由于显而易见的原因,它不能只将文字snip%
类放在那里。它存储在文件中的值是snip-class%
的'类名'。这可以是任何东西,只要编辑器具有与snip-class%
关联的类名,就可以加载它。此外,如果格式为"(lib ...)"
或"(lib ...) (lib ...)"
,则Racket会自动将其加载到列表中。
本身没有“需要”安装,这只是最简单的方法。否则,您需要在实际加载文件之前手动告诉编辑器如何处理剪辑。