长话短说:动机
我有一个 CL 代码在SORT
或MAPCAR
时中断,并出现一些错误,即数字(假设 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-ALIST
而不是HASH-TABLE-PLIST
(
一旦代码命中(BREAK)
它就会将我发送到调试器中。在此阶段,我可以逐步完成代码,但我决定检查STATE
。不幸的是,STATE
本身是通过WITH-SLOTS
-macro 从一个对象中获得的,该对象是另一个对象中的一个插槽,整个函数实际上是由sketch
库中的SKETCH
宏生成的......长话短说,要获得(STATE-REMOVED STATE)
我需要在检查器中浏览插槽访问层。
TL;DR:实际问题
这里有一个问题:现在我想在我正在检查的对象或该对象的插槽上调用HASH-TABLE-PLIST
。我如何访问它们中的任何一个(只是为了比较,在 Smalltalk 调试器中,我总是可以访问self
伪变量来获取内容(?有slime-inspector-eval
,但是如何传递没有显式本地绑定的东西?关于slime-inspector-eval
的文档并没有说太多。
好的,更多的谷歌搜索实际上回答了这个问题。我希望它对其他人有用。
感谢这篇博文:被检查的对象必然*
。此外,检查器中的M-Ret
(slime-inspector-copy-down
( 将对象存储在*
中的点下,以便可以在 REPL 中使用。