Racket:执行文件并保持交互模式

时间:2013-11-09 11:03:09

标签: racket

有没有办法从命令行运行Racket文件并在之后保持交互模式?

E.g。它在Python中也是如此:

python -i <file.py>

3 个答案:

答案 0 :(得分:20)

假设foo.rkt是这样的:

#lang racket
(provide x)
(define x 42)
(define y 4242)

然后您可以使用-i指定交互模式(= REPL)以及-t来要求文件:

$ racket -it foo.rkt
Welcome to Racket vX.X.X.
> x
42
> y
y: undefined; ...
> (exit)

请注意y没有绑定,因为它在模块中并没有提供。您更希望在foo模块内部使用REPL,这可以使用enter!进入模块的命名空间,在REPL中:

$ racket
> (enter! "foo.rkt")
> x
42
> y
4242
> (exit)

或在命令行上,使用-e(以及-i请求REPL):

$ racket -i -e '(enter! "foo.rkt")'
Welcome to Racket vX.X.X.
> x
42
> (+ x 12)
54
> (exit)

xrepl

如果你这么做,你可能会喜欢xrepl。在~/.racketrc中添加:

(require xrepl)

现在示例变为:

$ racket
Welcome to Racket vX.X.X.
-> ,en foo.rkt
42
"foo.rkt"> x
42
"foo.rkt"> (+ x 12)
54
"foo.rkt"> ,ex

除了,en之外,XREPL还有很多优点 - 比如您当前所在模块的快速指示,以及一些其他有用的命令:

$ racket
Welcome to Racket vX.X.X.
-> ,h
; Available commands:
;   help (h ?): display available commands
;   exit (quit ex): exit racket
;   cd: change the current directory
;   pwd: display the current directory
;   shell (sh ls cp mv rm md rd git svn): run a shell command
;   edit (e): edit files in your $EDITOR
;   drracket (dr drr): edit files in DrRacket
;   apropos (ap): look for a binding
;   describe (desc id): describe a (bound) identifier
;   doc: browse the racket documentation
;   require (req r): require a module
;   require-reloadable (reqr rr): require a module, make it reloadable
;   enter (en): require a module and go into its namespace
;   toplevel (top): go back to the toplevel
;   load (ld): load a file
;   backtrace (bt): see a backtrace of the last exception
;   time: time an expression
;   trace (tr): trace a function
;   untrace (untr): untrace a function
;   errortrace (errt inst): errortrace instrumentation control
;   profile (prof): profiler control
;   execution-counts: execution counts
;   coverage (cover): coverage information via a sandbox
;   switch-namespace (switch): switch to a different repl namespace
;   syntax (stx st): set syntax object to inspect, and control it
;   check-requires (ckreq): check the `require's of a module
;   log: control log output
;   install!: install xrepl in your Racket init file

的Emacs

但是,如果您是Emacs用户,您可能更喜欢使用以下内容:

答案 1 :(得分:2)

如果您使用 Visual Studio Code 作为编辑器,您可能需要使用“Code Runner 扩展”
确保它是从 vs 代码市场安装的
然后输入 Preferences: Open Settings (JSON) 并通过以下内容:

"code-runner.executorMap": {
        "racket": "(exit); racket -i -e '(enter! \"$fileName\")'",
    },

您可以通过点击 Run Code 图标或按 Ctrl+Alt+N

直接运行您的文件

注意:同样的操作适用于“scheme”,因为它也被球拍解释,但是将 #lang racket 放在文件的顶部是必要的

答案 2 :(得分:0)

可以用

完成
racket -if <file.rkt>

但是,如果文件以

开头,将不会按预期工作
#lang racket