rocking2008 发表于 2020-8-7 15:33:43

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 (全局变量/ 局部变量)
(主程序代码)
)


谢谢。

偶尔郁闷 发表于 2020-8-7 15:48:09

新手 小白 路过顶一下 等大佬完善

烟盒迷唇 发表于 2020-8-13 08:15:43

等待戈多....

llsheng_73 发表于 2020-8-13 08:59:38

局部变量,有时甚至局部函数
(defun c:TT ( 全局变量 / 局部变量)
(主程序代码)
)
这里 全局变量不是全局变量,而是调用该函数的入口参数,带C:开头的函数通常会当成命令使用,一般不宜带入口参数,那样在命令行很不方便使用它

JHX948954875 发表于 2020-8-13 09:22:21

谢谢楼主分享

rocking2008 发表于 2020-8-14 21:05:20

llsheng_73 发表于 2020-8-13 08:59
局部变量,有时甚至局部函数
(defun c:TT ( 全局变量 / 局部变量)
(主程序代码)


哦是这个意思呀。

rocking2008 发表于 2021-2-7 21:52:41

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:15:13

本帖最后由 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
(过年喝多了,失敬)没法撤销吗?

jiaxin_1111 发表于 2021-2-18 16:10:51

支持一下,我也来学习
页: [1]
查看完整版本: lisp代码,去掉使用中的各和BUG必需的写法