明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3274|回复: 16

如何获取已定义的全局变量名称?

  [复制链接]
发表于 2005-4-25 14:29 | 显示全部楼层 |阅读模式
如何获取CAD中已加载的.LISP.FAS.VLX文件中的所有已定义的全局变量的名称?
发表于 2005-4-25 14:32 | 显示全部楼层
要知道你的变量名才行
 楼主| 发表于 2005-4-25 14:44 | 显示全部楼层
可是想要的就是名称啊,为了防止再编的全局变量名称与原有的起冲突。比如一个程序中定义了全的全局变量名为"ASD",但是这个程序开CAD后没有执行过,那么"!ASD"返回的结果应该是NIL,我怎么才能知道这个ASD是被定义为全局变量了的呢?
发表于 2005-4-25 16:26 | 显示全部楼层
这个我也不知道怎么获得,不过我建议不要用全局变量,可以使用注册表,文件或系统变量等代替...


还有,如果还是要使用,取全局变量的时候取复杂一点,直观点,这样就很难重复
发表于 2005-4-26 08:08 | 显示全部楼层
用(ATOMS-FAMILY 0)可以得到当前LISP中所有程序名和变量名的原子表,楼主只要对这个表中的名字用TYPE函数进行判断就行了。
发表于 2005-4-26 08:17 | 显示全部楼层
这个函数好象不指定,就不能返回自定义的函数和变量...如果指定了,用它就多余了
 楼主| 发表于 2005-4-26 08:28 | 显示全部楼层
ZZXXQQ,不对啊,我试过了得不到全局变量,已赋值的跟未赋值的都得不到
发表于 2005-4-26 09:08 | 显示全部楼层
试一下下面的程序 (DEFUN C:TEST ()
(SETQ ATO (ATOMS-FAMILY 0)
TL (LENGTH ATO)
I 0
BL (LIST))
(REPEAT TL
(IF (NUMBERP (EVAL (NTH I ATO)))
(SETQ BL (CONS (NTH I ATO) BL))
)
(SETQ I (1+ I))
)
(PRINC BL)
(PRINC)
)
发表于 2005-4-26 09:37 | 显示全部楼层
(ATOMS-FAMILY 0)


返回的就没有自定义的东西啊,后面你再怎么弄这个返回的表,也不会把没有的东西弄出来吧
发表于 2005-4-26 10:18 | 显示全部楼层
我这里有个程序可以达到楼主的要求
  1. (defun hs_list  (funn / FL)
  2.    (if (= funn "")
  3.        (setq funn "*")
  4.        )
  5.    (setq  fl (vl-remove-if-not
  6.            (function (lambda (i) (wcmatch i (strcase funn))))
  7.            (atoms-family 1)
  8.            )
  9.   )
  10.    )
其中,自变量FUNN为字符串,可以带通配符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 10:20 , Processed in 0.318076 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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