package - SLIME 交互式开发 - 将代码粘贴到 SLIME REPL != 来自缓冲区的 eval 命令

标签 package common-lisp evaluation slime asdf

我正在尝试使用 asdf 创建一个名为“a”(学习)的基本包,我已经在 package.lisp 中定义了该包,我的主文件 a.lisp 开头为:

(in-package :a)
...

如果我正在开发我的模块,我只想通过执行 M-x slime-eval-buffer 或其他操作来将整个缓冲区运行 eval 到 SLIME REPL 中,但这不会发生,之后运行该命令我仍在 cl-user 包中:

;;; from a.lisp
A> (in-package :a)
#<PACKAGE "A">
CL-USER>     <--- should have stayed in A>

但是,如果我自己将整个代码粘贴到 SLIME REPL 中,它就已经可以工作了。尽管对于交互式开发来说,一遍又一遍地粘贴大量代码根本不是一件好事。

你能帮忙吗? 您对我的错误有什么建议吗?或者您通常如何应对这个问题?

谢谢。

最佳答案

Slime:缓冲区中的代码通常不会在 repl 中进行计算

I'd just like to run eval the whole buffer into the SLIME REPL by doing M-x slime-eval-buffer

该模型不是从源缓冲区“在 SLIME REPL 中进行评估”。人们评估连接的 Lisp 中的代码。这个连接的 Lisp 可能会为每个评估请求生成一个线程。

例如,您可以看到,在评估缓冲区后,通常的 REPL 变量如 * (最后的结果)不会更新。

当您将代码粘贴到 REPL 缓冲区中时,您可以从那里执行,并且它会执行 REPL 中的代码。

Slime:实际上是从 REPL 中的缓冲区进行计算

您可以将 Lisp 缓冲区中的代码评估到 REPL 中。请参阅命令 c-u m-x slime-eval-last-expression-in-repl 或更短的 c-u c-c c-jc-u 修饰符导致包的行为略有不同:

  1. 切换到 REPL 缓冲区
  2. 切换到源缓冲包
  3. 评估 REPL 中的源代码(包括设置 REPL 变量)
  4. 打印 REPL 缓冲区中的结果(包括设置 REPL 变量)
  5. 不要将 REPL 切换回其早期的包

注意:此行为特定于 SLIME,并不一定是其他环境的行为。

关于package - SLIME 交互式开发 - 将代码粘贴到 SLIME REPL != 来自缓冲区的 eval 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56089733/

相关文章:

algorithm - Lisp gethash 复杂性

ruby - 是否可以使用关键字参数传递函数

lisp - Unreachable Ill-formed if-expression 在 Scheme 中是语法错误,但在 Common Lisp 中不是

apache-spark - Spark管道评估

在 R 中读取 Gephi 图

cocoa - Mac 应用程序归档 - Apple Mach-O 链接器 (Id) 错误

android - 重命名应用程序包生成 fatal error "Fatal error occurred while performing refactoring"

Linux 文件夹/包管理

search-engine - 如何计算 MRR @n?

c# - C# 如何计算 lambda 表达式?