gpt4 book ai didi

load - 如何(重新)加载 Racket (X)REPL 中的文件?

转载 作者:行者123 更新时间:2023-12-04 06:05:20 24 4
gpt4 key购买 nike

假设我有一个像

#lang racket/base
(define (hello) (print "Hello"))
... more definitions ...

我想加载文件中的定义以在 (X)REPL 中交互地使用它们。我怎么做?

如果我启动 (X)REPL 和 (load "/tmp/hello.rkt") ,然后是 hello我无法使用该功能:
-> (hello)
; hello: undefined;

如果我 (require (file "/tmp/hello.rkt")) , 结果是一样的。现在我可以 (enter! (file "/tmp/hello.rkt"))然后 (hello)有效,但这似乎相当......不直观且对初学者不友好。

这确实是应该这样做的方式吗?我应该简单地阅读模块和命名空间以轻松浏览和试验我的代码,还是有一种更简单的方式我忽略了?

注:我找到了 How do you load a file into racket via command line? ,但这仅说明了如何运行该文件。不是如何在 REPL 中加载它,因此您可以测试/调试一些特定的定义,然后编辑、重新加载等。

最佳答案

由于以 #lang 开头的文件是模块,如果你 load,它什么都不做他们。 (实际上它有一些作用,但可能对你没有帮助。)最好避免使用load。完全,只是假装它不存在。

现在,使用 require是正确的,但它所做的是实例化模块并让您访问它提供的名称。在你的情况下,你没有提供任何东西,这意味着你不能使用你的 hello .为此,您可以添加 (provide hello)到文件。但这可能不是您想要的,因为您似乎想要调试代码。 (即,您不会想要 provide 模块中的所有内容只是为了处理事情。)

所以正确的使用是enter! ,或者如果您使用的是 xrepl,那么有一个更方便的 ,en命令。这将实例化模块并使 repl 使用模块的命名空间,因此您可以访问所有内容。 (而且你不需要loadrequire 它。)如果你改变它,你也可以多次使用它来重新加载代码。但请注意,它存在一些问题,因此您可能需要安装 nightly build使用它。

最后,您可能知道这一点,但与 DrRacket 一起工作通常会使事情变得更容易。

关于load - 如何(重新)加载 Racket (X)REPL 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14908888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com