首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SBCL中使用[采取新]重新启动

在SBCL中使用[采取新]重新启动
EN

Stack Overflow用户
提问于 2014-09-10 19:11:34
回答 1查看 286关注 0票数 2

当我试图以导致名称冲突的方式重新定义SBCL中的包时,我会在重新启动时得到一个NAME-CONFLICT错误。

代码语言:javascript
复制
 0: [KEEP-OLD] Keep symbols already accessible FOO (shadowing others).
 1: [TAKE-NEW] Make newly exposed symbols accessible in FOO, uninterning old ones.
 2: [RESOLVE-CONFLICT] Resolve conflict.
 3: [RETRY] Retry SLIME REPL evaluation request.
 4: [*ABORT] Return to SLIME's top level.
 5: [ABORT] Abort thread (#<THREAD "new-repl-thread" RUNNING {10060E47B3}>)

我想写一些自动调用TAKE-NEW重新启动的东西,这样我就可以做如下的事情

代码语言:javascript
复制
(force (defpackage :foo (:use :cl :bar :baz :mumble)))

其结果应该与调用defpackage相同,然后手动调用TAKE-NEW重新启动。问题是,

代码语言:javascript
复制
CL-USER> (handler-case 
         (defpackage :foo (:use :cl :bar :baz :mumble))
       (error (e) (compute-restarts e)))
(#<RESTART SWANK::RETRY {1006DC40F3}> #<RESTART ABORT {10068007E3}>
 #<RESTART ABORT {10060C7F93}>)
CL-USER> 

我似乎无法访问那个特定的重新启动。正如我试图调用它时所确认的那样:

代码语言:javascript
复制
CL-USER> (handler-case 
         (defpackage :foo (:use :cl :bar :baz :mumble))
       (name-conflict (e) (invoke-restart 'take-new)))

No restart TAKE-NEW is active.
   [Condition of type SB-INT:SIMPLE-CONTROL-ERROR]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [*ABORT] Return to SLIME's top level.
 2: [ABORT] Abort thread (#<THREAD "new-repl-thread" RUNNING {10060E47B3}>)

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-10 20:26:33

handler-case在将控制权转移到处理程序之前退出重新启动的范围;您需要handler-bind。这些构造之间的另外两个不同之处是,handler-bind有不同的语法(如下所示),而handler-bind不传输控制--也就是说,handler-bind处理程序返回显式传递控制所需的值,例如使用return-frominvoke-restart

下面这样的东西应该能起作用:

代码语言:javascript
复制
(handler-bind ((sb-ext:name-conflict
                (lambda (c)
                  (when (find-restart 'sb-impl::take-new c)
                    (invoke-restart 'sb-impl::take-new)))))
  (defpackage :foo (:use :mumble)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25773251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档