lisp代码,去掉使用中的各和BUG必需的写法
看了一个明经上的贴子写的lisp开头+结尾的写法,像我们这样的菜鸟看了很有用处,也写了一个,把error加进去了,以供参考。;1、正常一个程序是这样的结构
;--------------------------------------------------------------------
(defun c:TT (全局变量/ 局部变量)
(主程序代码)
)
;--------------------------------------------------------------------
;2、我们给它加上开头和结属,让程序使用时少BUG
(defun c:TT (全局变量/ 局部变量);程序结束果释放局部变量
;--------------------------------------------------------------------
(defun *error* ( msg );解决程序中途中止造成的一些问题
(if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
(progn (princ (strcat "\n错误: " msg)) (setvar "OSMODE" os))
)
(princ)
)
(setvar "cmdecho" 0);关闭回显
(setq os (getvar "OSMODE"));记录当前F3设置
(setvar "OSMODE" 16384);关闭捕捉
(setq clayer_bak (getvar "clayer"));_记录当前图层
(command "._undo" "_begin");这个是用来一键撤销所有操作的
;--------------------------------------------------------------------
(主程序代码)
;--------------------------------------------------------------------
(setvar "OSMODE" os);还原F3捕捉设置
(setvar "clayer" clayer_bak);还原图层
(command "._undo" "_end");这个是用来一键撤销所有操作的
(setvar "cmdecho" 1);还原回显设置
(princ)
;--------------------------------------------------------------------
);最后这个是前成defun对应的括号不要丢掉了
这样写可以有效防止程序使用中途中止或出错造成的F3丢失,CTRL+Z不能一次撤销,不能恢复到使用前图层的问题。
我是一只小菜鸟,之前看过一些老师的代码,是把这些代码直接写成自已的一个函数,这样每次写代码就不需要像上面这样写很多行,
直接写一行函数代码放首、尾即可。
有没有朋友可以给一个这样的函数,以及这个函数如何使用。
以这个为例:
(defun c:TT (全局变量/ 局部变量)
(主程序代码)
)
谢谢。
新手 小白 路过顶一下 等大佬完善 等待戈多.... 局部变量,有时甚至局部函数
(defun c:TT ( 全局变量 / 局部变量)
(主程序代码)
)
这里 全局变量不是全局变量,而是调用该函数的入口参数,带C:开头的函数通常会当成命令使用,一般不宜带入口参数,那样在命令行很不方便使用它 谢谢楼主分享 llsheng_73 发表于 2020-8-13 08:59
局部变量,有时甚至局部函数
(defun c:TT ( 全局变量 / 局部变量)
(主程序代码)
哦是这个意思呀。 llsheng_73 发表于 2020-8-13 08:59
局部变量,有时甚至局部函数
(defun c:TT ( 全局变量 / 局部变量)
(主程序代码)
(defun c:TT (aa / bb)
(setq aa 88)
(setq bb 99)
)
举个例子,如上代码,(aa / bb)这样写,当这个TT执行结束以后,其它程序中仍然是可以调用这个aa的值的,这个aa变量是一直在的,并没有随TT的结束而释放掉,所以我把它当成了全局变量,这样理解可对? 本帖最后由 vitalgg 于 2021-2-8 23:21 编辑
rocking2008 发表于 2021-2-7 21:52
(defun c:TT (aa / bb)
(setq aa 88)
(setq bb 99)
aa 是参数,不是全局变量。
(defun aa (myfun) (setq myfun 55))
(print myfun) 返回 nil
(过年喝多了,失敬)没法撤销吗?
支持一下,我也来学习
页:
[1]