明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1851|回复: 6

为什么*error*函数必须定义在自定义函数内部?否则....

[复制链接]
发表于 2003-10-27 10:00:00 | 显示全部楼层 |阅读模式
为什么*error*函数必须定义在自定义函数内部?否则*error*函数只能运行一次,我在一个文件中定义了两个函数,一个是自定义函数,一个是错误处理函数,错误处理函数是放在自定义函数的外面的,我想这样便于修改和阅读,但是这样错误处理函数并不能正常工作,他对所有的错误都处理(我的意思是只处理此自定义函数的错误),并且只处理一次,以后就不处理了,为何?我想可能是加载文件时错误处理函数运行了一次的原因,我在自定义函数的结尾有恢复默认错误函数的语句,所以只运行了一次,对不对?
但为什么定义在外面之后,我又在自定义文件内加了执行这个函数,也不行?
发表于 2003-10-27 13:06:00 | 显示全部楼层
你先将原来的*error*函数保存,错误处理完后或者程序正确运行结束后将它恢复
(setq errtmp *error*);将原*error*保存
(setq *error* err);设置*error*,err为你自定义的错误处理函数
...
最后(setq *error* errtmp);恢复*error*,注意,有两个地方要恢复,一个是如果出错,执行错误处理时,这是后面的程序不会再执行,如果你只在程序结尾设置恢复,那这个将无法正确恢复。
另一个就是如果程序正确执行,最后也要将它恢复过来。
 楼主| 发表于 2003-10-27 13:15:00 | 显示全部楼层
我是这样做的
在*error*和主程序中都有(setq *error* errtemp)类似的语句,只是把defun *error* 函数放在了主函数外面定义的而已
发表于 2003-10-27 13:27:00 | 显示全部楼层
你定义就应该这样定义了
(defun err(msg)
...
)
使这个函数变为错误处理函数,使用(setq *error* err)

而不能
(defun *error*(msg)
...
)
这样定义后,你加载是就已经修改了*error*的定义,你再在程序里做任何工作都是徒劳的。
 楼主| 发表于 2003-10-27 13:31:00 | 显示全部楼层
你的意思是:(defun err(msg)
...
)定义在主函数外

在主函数中加入一条语句(setq *error* err)
就可以了。
我的理解对不对?
发表于 2003-10-27 13:32:00 | 显示全部楼层
完全正确,加10分!
 楼主| 发表于 2003-10-27 14:22:00 | 显示全部楼层
试验通过
真的谢谢您
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 14:32 , Processed in 0.236667 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表