2017-08-15 73 views
2

長的故事:動機

我有上SORTMAPCAR打破了一些錯誤,一些(比如說,25)不是列表的CL碼。這告訴我我通過它們的數據結構有問題。所以,我把(BREAK)放在發生錯誤的地方之前的代碼中。它看起來是這樣的:slime-inspector-eval:如何獲得檢查器中的綁定?

(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我應該使用HASH-TABLE-ALIST

一旦代碼命中(BREAK)它將我發送到調試器。在這個階段,我可以通過代碼,但我決定檢查STATE。不幸的是,STATE本身是通過WITH-SLOTS獲得的 - 從另一個對象的插槽中獲取對象的宏,並且整個函數實際上是由宏的sketch庫生成的......長話短說,得到(STATE-REMOVED STATE)我需要通過檢查員的插槽訪問層。

TL; DR:實際問題

這裏是一個問題:現在我要打電話HASH-TABLE-PLIST無論是在哪,我檢查的對象或該對象的插槽。我怎樣才能訪問其中的任何一個(僅用於比較,在Smalltalk調試器中,我總是可以訪問self僞變量來獲取內容)?有slime-inspector-eval,但我如何傳遞我沒有明確的本地綁定的東西?有關slime-inspector-eval的文檔沒有多少說明。

回答

4

好的,多一點谷歌搜索實際上回答了這個問題。我希望這會對其他人有用。

感謝this blogpost:檢查對象綁定到*。此外,檢查員(slime-inspector-copy-down)中的M-Ret將對象存儲在*的點下,因此它可以在REPL中使用。