明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1276|回复: 8

[讨论] lisp代码,去掉使用中的各和BUG必需的写法

[复制链接]
发表于 2020-8-7 15:33:43 | 显示全部楼层 |阅读模式
看了一个明经上的贴子写的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:59:38 | 显示全部楼层
局部变量,有时甚至局部函数
(defun c:TT ( 全局变量 / 局部变量)
(主程序代码)
)
这里 全局变量不是全局变量,而是调用该函数的入口参数,带C:  开头的函数通常会当成命令使用,一般不宜带入口参数,那样在命令行很不方便使用它
发表于 2020-8-13 09:22:21 | 显示全部楼层
谢谢楼主分享
 楼主| 发表于 2020-8-14 21:05:20 | 显示全部楼层
llsheng_73 发表于 2020-8-13 08:59
局部变量,有时甚至局部函数
(defun c:TT ( 全局变量 / 局部变量)
(主程序代码)

哦是这个意思呀。
 楼主| 发表于 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的结束而释放掉,所以我把它当成了全局变量,这样理解可对?
发表于 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
(过年喝多了,失敬)没法撤销吗?
发表于 2021-2-18 16:10:51 | 显示全部楼层
支持一下,我也来学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-17 05:40 , Processed in 0.174353 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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