使用Racket创建新的剪辑%

时间:2016-12-12 16:39:48

标签: user-interface graphics editor racket

我正在尝试在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 我知道它本身并不需要作为库安装,但文档似乎强烈推动你朝这个方向发展

1 个答案:

答案 0 :(得分:0)

好的,我想我终于找到了答案。广义而言:

snip%类包括绘制剪辑的方法,告诉编辑器为图片预留多少空间,以及处理鼠标点击等事件。

接下来,snip-class%类用于编码和解码剪辑。这必须是一个单独的类,因为当保存到文件时,编辑器需要编码它是什么类型的剪辑,并且由于显而易见的原因,它不能只将文字snip%类放在那里。它存储在文件中的值是snip-class%的'类名'。这可以是任何东西,只要编辑器具有与snip-class%关联的类名,就可以加载它。此外,如果格式为"(lib ...)""(lib ...) (lib ...)",则Racket会自动将其加载到列表中。

本身没有“需要”安装,这只是最简单的方法。否则,您需要在实际加载文件之前手动告诉编辑器如何处理剪辑。