找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 799|回复: 7

[必看]:这个子程序的变量为什么没有释放?

[复制链接]
发表于 2004-8-2 10:54:13 | 显示全部楼层 |阅读模式

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

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

×
如下

  1.   [FONT=courier new]
  2. (defun C:BIJIAO        ()
  3.   (setq LUJING (getfiled "随便选取一个OUT文件" "" "OUT" 2))
  4.                                         ;保存OUT文件的目录
  5.   (setq        OUT (提取 LUJING ".OUT")
  6.         TTT (提取 LUJING ".TTT")
  7.         DXF (提取 LUJING "_2.DXF")
  8.   )
  9.                                 ;提取有用的文件名称,例如*.OUT,*.TTT,*_2.DXF

  10.   )

  11. (defun 提取 (ZI1 ZI2 / MULU FILES K N JIHE)
  12.   (setq MULU (vl-filename-directory ZI1)) ;目录
  13.   (setq FILES (vl-directory-files MULU)) ;所有文件
  14.   (setq K 0)                                ;循环计数器
  15.   (setq N (length FILES))                ;总的循环次数
  16.   (setq JIHE NIL)                        ;循环结果赋初值
  17.   (while (< K N)
  18.     (if        (wcmatch (strcase (nth K FILES)) (strcat "*" ZI2))
  19.                                         ;判断是否为".ZI2"文件
  20.       (setq JIHE (cons (nth K FILES) JIHE))
  21.     )
  22.     (setq K (+ 1 K))
  23.   )
  24.   (setq JIHE JIHE)                        ;结果
  25. )
  26.   [/FONT]

子程序中的MULU FILES K N JIHE,运行完了不是NIL。谢谢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-2 11:12:58 | 显示全部楼层
临时变量,应该释放了,搞不清楚了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-8-2 18:47:25 | 显示全部楼层
我是这样理解的,Lisp在局部变量原来有值时,先将原来的值保存,变量使用后(程序运行)在将原来的值返回,就像我们编程时控制系统变量一样。
一下一段代码可以验证:
[php](defun c:test ()
  (setq a "ABC"                      ;设定全局变量a、b
        b 3
  )
  (mmm)                              ;运行内部函数
  (princ "\n全局变量a=")
  (princ a)
  (princ "\n全局变量b=")
  (princ b)
  (princ)
)
(defun mmm (/ a b)
  (setq a 3.5                        ;设置局部变量a、b,与全局变量同名
        b (* 3 a)
  )
  (princ "局部变量a=")
  (princ a)
  (princ "\n局部变量b=")
  (princ b)
)
[/php]
运行结果:
  1. _$
  2. _$ (c:test)
  3. 局部变量a=3.5
  4. 局部变量b=10.5
  5. 全局变量a=ABC
  6. 全局变量b=3
  7. _$
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-2 20:27:12 | 显示全部楼层
你新建一个文件试,或者干脆退出CAD,重新进入,重新加载。可能是你在编程时事先没有将其设成局部变量,运行过后才设,这样它返回的值其实是没设之前的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-2 21:46:14 | 显示全部楼层
对,重新打开就可以了。十分感谢大家的帮助。
可能原因是因为我在vlisp编辑器里调试程序时,抢在程序自动运行前,一步一步运行过后产生了全局变量,看来在调试程序后,关掉CAD,再重新打开加载就能检验局部局部变量是否释放。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-8-3 15:00:00 | 显示全部楼层
最初由 张世杰 发布
[B]对,重新打开就可以了。十分感谢大家的帮助。
可能原因是因为我在vlisp编辑器里调试程序时,抢在程序自动运行前,一步一步运行过后产生了全局变量,看来在调试程序后,关掉CAD,再重新打开加载就能检验局部局部变量... [/B]

还有一种变量“赋”初值的情况,就是程序运行非正常中断,有时前面“赋”的初值会保留。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 10:12 , Processed in 0.198530 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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