【问题标题】:Creating a new snip% with Racket使用 Racket 创建新的 snip%
【发布时间】:2017-04-27 14:10:33
【问题描述】:

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

不幸的是,creating new snips 的文档虽然全面,但有点难以理解,还有一些问题需要回答。

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

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

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

我的意思是,截至目前,我可以在创建新片段时复制/粘贴 sample given in the docs。但是我很难理解这里的设计,所以我可以正确使用它们。

1我知道还有其他方法可以做到这一点,但我也想要有交互式按钮之类的。

2我知道它本身需要作为库安装,但文档似乎强烈推动您朝这个方向发展。

【问题讨论】:

  • 我怀疑 snip-reader% 有一个与 snip% 分开的类,以便可以在非 gui 程序中处理 snips(请注意,snip-reader% 属于 wxme)。
  • FWIW:editor%editor-class% 使用相同的设计模式
  • 我找不到editor-class%,但我可以找到editor-data-class%,你指的也是这个吗?
  • 是的 - 就是这个。
  • 所以,问题在于,在查看该文档时,似乎假设我已经理解了 snip-class% ......:/

标签: user-interface graphics editor racket


【解决方案1】:

好吧,我想我终于找到了答案。概括地说:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2017-02-28
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2017-02-28
    • 2016-03-18
    • 1970-01-01
    相关资源
    最近更新 更多