Lee Mac 发表于 2022-7-6 15:21:01

错误定位

好啊
 
所以我在这里看到了很多关于错误处理程序的不同讨论。
 
我已经和阿斯米、大卫·贝瑟尔、卡布等谈过了。。。
 
有人说要使用错误处理程序,如:
 

(defun *error* (msg)
   ....
)

 
并定位主函数中的*错误*,
 
其他人使用*error*函数重置系统变量:
 

(*error* "") ; reset variables

 
一些人不同意,并表示要格式化处理程序:
 

(setq *error* (lambda (e)
   (cond....
)

 
哪种方法正确?!
 
干杯
 

ASMI 发表于 2022-7-6 15:39:07

这取决于目标。我在这个问题上的理念很简单:“恢复原状”。但这只是因为我不知道我的工作计划在哪里。
 
如果特定用户需要遵循的理念可能不同:“按照标准恢复”。
 
我不相信有权利去禁用一个不知名的家伙BLIPMODE,他可能会喜欢它。这就是为什么我写局部函数*error*,它只与我的程序相关。我从来没有写过处理错误的标准条款,也没有印章,每个处理错误都是不同的。

Lee Mac 发表于 2022-7-6 15:49:35

很好,ASMI,
 
设置为以前的设置,而不是重置为标准变量集。
 
但是,使用将处理程序定义为局部函数的方法,是否必须在主函数中定位*错误*?

David Bethel 发表于 2022-7-6 15:55:10

李,
 
我不认为有一个正确的答案是如何定义一个错误(setq vs defun)
 
我确实认为,在错误情况下,它应该:
[列表]
[*]如果激活,则取消命令
[*]适当时显示有意义的消息
[*]撤消程序对数据库所做的所有更改
[*]调用重置模式子例程
重置子程序应:
[列表]
[*]将系统变量和模式重置为其原始状态
[*]结束撤消组
[*]还原*错误*处理程序
附件是1997年计算机日的讨论。这大概是R13发布的时候,我们中的很多人仍然在使用R12。
 
我读了一些有趣的书,尽管其中有些内容有点冗长-大卫
清洁。拉链

Lee Mac 发表于 2022-7-6 16:10:23

谢谢你的意见大卫-我看到这是一个很大的讨论问题-特别是根据你的附件长度!
 
我发布这条帖子的唯一原因是为了能把事情做好。
 
我不想回答人们的问题,也不想发布写得很糟糕/不正确的例程。所以我想从这里有经验的人那里学习,了解如何正确格式化例程,比如错误处理程序。
 
在阅读了您的回复后,我意识到似乎没有一种标准的方法来分配错误处理程序,每个人似乎都有自己的方法。
 
我看了David的错误模板——注意它包括函数重置的所有方面——包括“撤销组”和一系列系统变量。
 
在我的错误例程中,我通常将error定义为一个子函数,并收集我打算随着例程的进行而更改的sysvars值最终,事情发展到了最后。
 
我想让事情简单明了,但我想把事情做好。

David Bethel 发表于 2022-7-6 16:17:44

李,
 
这是在这样的论坛上发布代码片段和完整程序的缺点之一。很难用一个简短的格式抓住所有的可能性。
 
用户有责任确保有足够的备份,知道即使有最好的意图,程序员也会犯错误,这可能会毁了他们的一天。因此,这是一种“买家当心”,在证明有价值之前,不要在生产图纸上使用这些东西-大卫

Lee Mac 发表于 2022-7-6 16:26:28

 
大卫说得好。
 
毕竟,这里没有人试图提供恶意程序,但我们不能解释每一个结果。
页: [1]
查看完整版本: 错误定位