无法在Emacs racket repl模式下定义类
我可以在racketrepl中这样定义一个类,从shell开始。我使用的是v6.12无法在Emacs racket repl模式下定义类,emacs,racket,Emacs,Racket,我可以在racketrepl中这样定义一个类,从shell开始。我使用的是v6.12 (define book-class% (class object% (field (pages 5)) (define/public (letters) (* pages 500)) (super-new))) 一切正常。但当我在emacs中尝试同样的方法,通过C-xc-e执行表达式时,输出是 ; class: undefined; ; cannot referen
(define book-class%
(class object%
(field (pages 5))
(define/public (letters)
(* pages 500))
(super-new)))
一切正常。但当我在emacs中尝试同样的方法,通过C-xc-e
执行表达式时,输出是
; class: undefined;
; cannot reference undefined identifier
直接在emacs球拍外壳中写入相同的定义会显示相同的错误
为什么会发生这种情况?我如何更改repl以允许创建类?实际上是多种模式。主要有两项:
用于编辑球拍源文件球拍模式
a replracket repl模式
拍子复制模式
将直接打开。它与无球拍模式
缓冲区或.rkt
文件相关联。它是“空的”
正如soegaard所说,它只有来自racket/base
的绑定
正如亚历克西斯所说,如果您想使用球拍/class
,则可以输入(require racket/class)
——或(require racket)
尽管您可以按照您描述的方式使用
racket repl模式
“单机”,但预期用途是一个类似以下的工作流程:
.rkt
文件(该文件将自动成为球拍模式
缓冲区).rkt
文件的名称空间中有了一个racket repl模式
缓冲区,并有一个提示即使您只关心独立使用REPL,也可以创建一个小的
.rkt
文件来打开REPL。你可以叫它(比如)config.rkt
。也许只是:
#lang racket
加上您通常使用的任何要求
现在,您可以通过打开config.rkt
(或任何您称之为它的名称)并执行C-C C-C来启动REPL。您可能必须通过编写(require racket/class)
来导入racket/class
。导入完成了。你知道为什么emacs repl需要它,但从bash启动的racket repl可能不需要吗?这是因为racket/class
是racket
的一部分,而不是racket/base
。据我所知,Emacs中的球拍模式
默认为racket/base
。