slime-inspector-eval:如何在检查员中获得绑定?

时间:2017-08-15 10:50:47

标签: emacs common-lisp slime

长篇故事:动机

我的CL代码在SORTMAPCAR上中断,但有一些错误(例如,25)不是列表。这告诉我传递它们的数据结构有问题。因此,我将(BREAK)放在发生错误的地方之前的代码中。它看起来像这样:

(sort
 (progn
  (break)
  (mapcar (lambda (pair)
            (list (car pair) (cdr pair)))
          (hash-table-plist (state-removed state)))
 #'<
 :key #'car)

(为了给出更多的上下文,这里的想法是将哈希表(STATE-REMOVED STATE)转换为按键排序的对列表,错误是代替HASH-TABLE-PLIST我应该使用{{ 1}})

一旦代码命中HASH-TABLE-ALIST,它就会将我发送到调试器。在这个阶段,我可以逐步完成代码,但我决定检查(BREAK)。不幸的是,STATE本身是由STATE - 来自一个对象的宏获得的,该对象是另一个对象中的一个槽,整个函数实际上是由WITH-SLOTS宏生成的SKETCH很长一段时间,要到达sketch我需要在检查器中查看插槽访问层。

TL; DR:实际问题

这是一个问题:现在我想在我正在检查的对象上或在此对象的插槽上调用(STATE-REMOVED STATE)。我如何访问其中任何一个(仅用于比较,在Smalltalk调试器中我总是可以访问HASH-TABLE-PLIST伪变量来获取东西)?有self,但如何传递我没有明确本地绑定的内容? slime-inspector-eval上的文档并没有多说。

1 个答案:

答案 0 :(得分:4)

好的,谷歌搜索实际上回答了这个问题。我希望它对别人有用。

感谢this blogpost:受检查的对象绑定到*。此外,检查器中的M-Retslime-inspector-copy-down)将对象存储在*下的对象下,以便可以在REPL中使用。