找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3218|回复: 16

[LISP函数]:怎么样才能尽可能少的使用全局变量?

[复制链接]
发表于 2005-12-25 18:11:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
编程的时候为了让程序能记住一些特定参数, 不得不使用全局变量. 本来释放几个参数到内存倒不是什么大问题,也不至于影响速度. 但是不知道是不是自己编程的习惯不好,很多程序都会使用相同的变量名(如: pt1 pt2 pt3之类的),于是问题就来了. 这些变量的值不断的被别的程序修改,到最后非但没起到记忆的作用,反而添乱了.

不知道大家通常都怎么做的?怎么样才能尽可能少的使用全局变量?或者说尽可能少的不让全局变量相互干扰?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 5188个

财富等级: 富甲天下

发表于 2005-12-25 19:47:47 | 显示全部楼层
通常我编程序时,变量均尽量定义为局部的。确实需要全局变量时,按如下方式定义:
姓名:程序名_变量名。如在CHKDWG.LSP中设置全局变量WIDTH时为:YDTB:CHKDWG_WIDTH,这样就不容易重复了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-25 20:59:27 | 显示全部楼层
嗯,这样倒是不会重复了,只要没有同名的程序。
但是有没有可能每个程序最多只释放一个变量呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

发表于 2005-12-25 21:47:44 | 显示全部楼层
用词典吧。用这个下次打开DWG文件时还可以提取到。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-12-25 22:19:54 | 显示全部楼层

Re: [LISP函数]:怎么样才能尽可能少的使用全局变量?

最初由 litss 发布
[B]编程的时候为了让程序能记住一些特定参数, 不得不使用全局变量. 本来释放几个参数到内存倒不是什么大问题,也不至于影响速度. 但是不知道是不是自己编程的习惯不好,很多程序都会使用相同的变量名(如: pt1 pt2 pt3之类... [/B]


尽量不要用全局,不然自己都会忘了代表什么意思的,而且常会打架
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-25 22:48:59 | 显示全部楼层
to yuefeng 斑竹:
   词典怎么用?和别人经常说的写到注册表是一回事么?

to aeo 斑竹:
   我也想最好不用全局变量。但这样怎么实现参数的记忆能力呢?特别是有多个参数需要保留的情况。能给个例子么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-26 04:28:21 | 显示全部楼层
多用局部变量
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

发表于 2005-12-26 11:05:11 | 显示全部楼层
最初由 litss 发布
[B]to yuefeng 斑竹:
   词典怎么用?和别人经常说的写到注册表是一回事么?

to aeo 斑竹:
   我也想最好不用全局变量。但这样怎么实现参数的记忆能力呢?特别是有多个参数需要保留的情况。能给个例子么? [/B]

词典的数据是保存在DWG文件中的,并不保存在注册表中。
VLAX-LDATA-PUT 词典赋值。
VLAX-LDATA-GET 取词典中定义的值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-26 19:14:09 | 显示全部楼层
谢谢yuefeng斑竹的提示:)
下边是我自己写的一个试验品, 基本成功. 有相同问题的朋友可以试试.

对于词典的用法,我还有两个小问题:
1. 如下边程序中的"dict"参数, 是不是也最好根据不同的程序, 起不同的名字, 否则还会有可能产生混乱?

2. 用词典记录参数是不是意味着, 每次这个参数发生改变的时候(被重新赋值), 都得立即把这个参数vlax-ldata-put 一次?  还有没有更简洁的方式?

[PHP]
(defun c:test (/ aa)
  (if (vlax-ldata-get "dict" "a")
    ()
    (vlax-ldata-put "dict" "a" "200")
  )
  (setq aa (getstring (strcat "\nInput String [" (vlax-ldata-get "dict" "a") "]:")))
  (if (= aa nil)
    ()
    (vlax-ldata-put "dict" "a" aa)
  )
  (princ)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-27 12:32:08 | 显示全部楼层
学习中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-28 09:40:04 | 显示全部楼层
这是头一次接触词典,我以前都是用user系列的十五个变量,和用词典差不多,用setvar和getvar存储和提取。看来今后的学习用词典了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5188个

财富等级: 富甲天下

发表于 2006-1-8 21:46:37 | 显示全部楼层
有个问题想请教一下各位高手:自定义的词典如何保存呢?

先定义一个图形比例:

(vlax-ldata-put "Userdict" "scal" 100)
我试了一下,在ACAD2004中,用SAVE存盘退出,重新进入,自定义词典还在;但若用WBLOCK存盘退出,重新进入,自定义部分就没了。而我已习惯了用WBLOCK存盘。

用什么方法能让词典中一直保留自定义的内容呢?请各位高手不吝赐教。

小弟在此先谢了!

点评

用扩展记录,保存的实体上,比如图层0,用扩展记录把信息存到0层的扩展记录上。  详情 回复 发表于 2013-8-23 12:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-11 23:58:47 | 显示全部楼层
我在编程时采用子程序,子程序中的临时变量均为局部变量,子程序间传递数据变量采用全局变量,但在程序结束全部回收。如确需在程序间传递数据,我通常采用文件,变量命名与二楼类似,但我的习惯是不用冒号,而是均采用下划线。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-12 11:57:46 | 显示全部楼层
我编程时尽量使用局部变量而不使用全局变量。函数之间传递参数均采用返回值。有多个返回值时就考虑采用表形式返回。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-1-12 13:52:53 | 显示全部楼层
前面有人讲到采用数据词典,请问同一个DWG文件中可以保存多个数据词典吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 14:49 , Processed in 0.423415 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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