无法在Emacs球拍替换模式下定义类

时间:2018-07-28 01:02:32

标签: emacs racket

我可以在从外壳开始的球拍复制中定义类似的类。我正在使用v6.12

if (pval != null)
{
    // this is bad, an IndexOutOfRangeException will be thrown
    // if pval contains less than 2 elements:
    // Console.WriteLine(pval[0] + "," + pval[1]);

    // use string.Join instead::
    Console.WriteLine(string.Join(",", pval));
}

一切正常。但是,当我在emacs中尝试通过(define book-class% (class object% (field (pages 5)) (define/public (letters) (* pages 500)) (super-new))) 执行表达式时,输出为

C-x C-e

直接在emacs球拍外壳中写入相同的定义会显示相同的错误。

为什么会发生这种情况,如何更改我的repl以允许创建类?

1 个答案:

答案 0 :(得分:3)

"racket-mode" package实际上是多种模式。主要的两个是:

  • racket-mode用于编辑Racket源文件。
  • racket-repl-mode是REPL。

如果您要进行 M-x球拍复制,则racket-repl-mode将直接打开。它与没有racket-mode缓冲区或.rkt文件没有关联。它是“空”。

如soegaard所说,它仅具有racket/base的绑定。

如亚历克西斯所说,如果您想使用(require racket/class)中的内容,则可以输入(require racket)racket/class


尽管您可以按照描述的方式使用racket-repl-mode“独立”,但预期的用途是这样的工作流程:

  1. 访问一个.rkt文件(它将自动成为一个racket-mode缓冲区)。
  2. C-c C-c 又名 M-x球拍运行
  3. 现在,您在racket-repl-mode文件的名称空间中有了一个.rkt缓冲区,并带有提示。

即使您只关心独立使用REPL,也可以制作一些.rkt文件来打开REPL。您可以称它为config.rkt。也许很简单:

#lang racket

加上您通常使用的所有require

现在,您可以通过打开config.rkt(或您所谓的名称)并执行 C-c C-c 来启动REPL。