有没有办法从命令行运行 Racket 文件并在之后保持交互模式?
例如,在 Python 中相同的是:
python -i <file.py>
假设是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
. 在您~/.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 用户,您可能更喜欢使用以下内容:
如果您使用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
文件的顶部是必要的
它可以用
racket -if <file.rkt>
但是,如果文件以
#lang racket