我正在学习defclass
和defmethod
以及defgeneric
,因此我使用成员defclass
制作了一个名为savings-account
的{{1}}。< / p>
我创建了一个balance
(如下所示)以开始改变余额的值,但它还没有完成。
defun
然后我决定改为(defun balance (account)
(slot-value account 'balance))
(下面)。
defgeneric
但是当我运行(defgeneric balance (account))
时,我收到了这个错误:
BALANCE已经命名普通函数或宏。
有没有办法轻松取消调用或取消平衡,所以我不必重启我的Emacs会话?
答案 0 :(得分:6)
您可以使用fmakunbound删除函数定义(使用defun或defgeneric创建)。
答案 1 :(得分:2)
任何自尊的Lisp都会为您提供错误 restart 以更改定义。
SLIME和Clozure CL:
The function BALANCE is defined as something other than a generic function.
[Condition of type CCL::SIMPLE-PROGRAM-ERROR]
Restarts:
0: [CONTINUE] Try to remove any global non-generic function or macro definition.
1: [RETRY] Retry SLIME REPL evaluation request.
2: [*ABORT] Return to SLIME's top level.
3: [ABORT-BREAK] Reset this thread
4: [ABORT] Kill this thread
只需在该缓冲区中键入0或选择相应的行并按 return 即可选择CONTINUE
重启。
除了Xach的回答,使用 SLIME ,您只需将文本光标移动到函数名称上,然后键入 cc cu ,即调用SLIME-UNDEFINE-FUNCTION
。