我可以在从外壳开始的球拍复制中定义类似的类。我正在使用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以允许创建类?
答案 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
“独立”,但预期的用途是这样的工作流程:
.rkt
文件(它将自动成为一个racket-mode
缓冲区)。racket-repl-mode
文件的名称空间中有了一个.rkt
缓冲区,并带有提示。即使您只关心独立使用REPL,也可以制作一些.rkt
文件来打开REPL。您可以称它为config.rkt
。也许很简单:
#lang racket
加上您通常使用的所有require
。
现在,您可以通过打开config.rkt
(或您所谓的名称)并执行 C-c C-c 来启动REPL。