明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2604|回复: 5

[基础] 死活就是不能把变量给释放掉

[复制链接]
发表于 2013-2-28 13:00:11 | 显示全部楼层 |阅读模式
本帖最后由 richine001 于 2013-2-28 17:18 编辑

小弟编写了一个小程序,其中 (setq  bjiben  jizhun) 不能正常赋值,调试后发现变量 jizhun 不能自动释放,是上次执行的值,再次运行又能赋值,请大侠们帮忙,看看怎么解决这个问题,论坛上搜索,有点跟这个性质类似:








{{{{{{{猜是 命令列 所设定的变量值
Command: (defun C:test (/ a b) (setq a 1 b 2) (+ a b))
C:TEST



Command: test
3

Command:
Command: !a
nil

Command: (setq a 5)
5

Command: test
3

Command:
Command: !a
5}}}}}}}}}}}}




以下是我的代码:
(defun c:test()
     (setvar "cmdecho" 0)
     (command "undo" "be")
     (setvar "cmdecho" 0)
     (command "ucs" "w")
     (vl-load-com)
     (setq layn "WALL_边缘构件轮廓_S")
     (setq layn2 "WALL_边缘构件纵筋面积_S")
     (setq ss(ssget))
     (setq ssss1(ssget "P"'((0 . "LWPOLYLINE")(8 . "1_钢筋_S") (42 . 1)(40 . 50))))
     (setq tongjishuliang(sslength ssss1))
     (setq  n16 6)
     (setq  n14 (- tongjishuliang  n16 ))
     (setq  a22 0)
     (setq  a1 0)
     (princ "\n选择要计算的矩形构件")
     (setq j 0)
     (repeat (sslength ss)
        (setq en(ssname ss j))
        (setq endata(entget en))
        (setq entype(cdr(assoc 0 endata)))
        (setq entlay(cdr(assoc 8 endata)))
        (if (and (= entype "LWPOLYLINE")(= entlay "WALL_边缘构件轮廓_S"))
      (progn
        (setq obj55(vlax-ename->vla-object en))
        (setq a222(vla-get-Area obj55))
        (setq a1(* a222 0.04))
            (setq jizhun(* a222 0.0004))
          )
    )
        (if (and (= entype "TEXT") (= entlay "WALL_边缘构件纵筋面积_S"))
      (progn
       (youhua-gangjin)
       (setq entoldlist1(assoc 1 endata))
           (setq entnewlist(cons 1 wenben))
       (setq endata(subst  entnewlist  entoldlist1 endata))
       (entmod endata)
       (setq str1 (cdr (assoc 1 endata)))
           (setq mba (BarArea str1))
      )
     )   
        (setq j (1+ j))
      )
     (prin1)
)

;;a11为钢筋1.0%的钢筋面积
(defun youhua-gangjin()   
  (setq  zongmianji(+ (* n14 154)( * n16  201)))
  (setq  bjiben  jizhun)
  (setq  I 0)
  (while  (and (<= zongmianji  bjiben) (<= n16  tongjishuliang))
      (if (or (<= zongmianji  bjiben) (< n16  tongjishuliang))
    (progn
       (setq  n16 (+ n16 2))
       (setq  n14 (- tongjishuliang  n16 ))
       (setq  zongmianji  0)
       (setq  zongmianji(+ (* n14 154)( * n16  201)))
       (setq  I(1+ I))
    )
      )
   )
)



该贴已经同步到 richine001的微博

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-2-28 16:10:21 | 显示全部楼层
我这里测试你的程序没通过,就不说许多了,现在就简单说一说前面的那个“!a”的值吧。
你看到的这个测试是没错的,这就是所谓形参和实参的关系,说起来有点复杂,我就换个角度通俗说一下,在程序外面把a定义为5,这是全局变量,而程序中使用a作为局部变量,与程序外的全局变量无关,也就是说,程序运行过程是一个包,这个包与系统通过全局变量来接口,只有全局变量相互影响,而局部变量就只能在这个包里面自己关起门来处理,与外面无影响,虽然名称相同,但实际内容不同,名字只是个符号而已。但如果去掉了局部变量声明(就是函数后面的那个括号的内容),这个“包”对这个变量也就不再封闭了。
 楼主| 发表于 2013-2-28 20:47:28 | 显示全部楼层
哎,还是不知道怎么弄,
我的变量都是自变量哈,
发表于 2013-2-28 22:47:59 | 显示全部楼层
在函数后面加一个变量声明试试:c:test(/ jizhun)。
如果不是这个意思,就在程序使用完这个变量时强行赋值:(setq jizhun ...)
发表于 2013-3-1 07:40:07 | 显示全部楼层


本帖子中包含更多资源

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

x
 楼主| 发表于 2013-3-1 21:59:50 | 显示全部楼层
感谢给位大侠,程序能运行了,多谢,多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-1 23:08 , Processed in 0.200341 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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