阅读代码并试图找出他们的想法总是很困难和乏味的。在大多数情况下,可以嵌套defun并在主defun中kill声明其变量。但你真的不想有几个嵌套的defuns,因为它使故障排除变得困难。我喜欢把我的子程序分开,我不共享变量。
在你开始改变事情之前,复制一份程序。
首先,我将打开我的lisp控制台并创建一个项目,以便更轻松地处理该程序的所有文件。然后将所有相关文件加载到控制台中。然后逐个单击变量并使用查找功能,在“查找”对话框中选择“在项目中查找”选项并选择项目名称。这将显示该变量在多个文件中的每次出现。然后,您可以判断变量的分散程度,并决定如何处理它。
您可以在主函数声明区域中声明所有变量,包括子函数变量,并查看程序是否正常工作。想要尽快消除变量的原因是内存问题。变量使用内存直到释放。如果是一个有数百个变量的大程序,最好杀死a.s.a.p。但是一个有20个变量的小程序最终杀死所有变量并没有什么大不了的。
如果子函数包含主函数或其他函数中使用的变量,则应考虑对其进行更改。当调用子函数时,它应该返回您的答案,然后您有机会在程序继续确保其正确之前检查答案。
单向的简单示例:
-
- (defun c:test1 ( / a b c )
- (setq a (getint "enter a number"));_user number
- (setq b (getint "enter another number"));_user number
- (setq c (addnum a b));_call to sub passing 2 vars
- (if c (alert (strcat "Your Total Is "(itoa c))));_check it and display result
- (princ)
- );_defun
- (defun addnum (aug1 aug2 / x ret)
- (setq x (+ aug1 aug2));_add 2 numbers
- (setq ret (* x 3));_times number by 3
- ret ; i like to do it this way to make sure my return is the last thing processed by the sub
- );_defun
|