peng197806 发表于 2005-4-25 14:29:00

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

如何获取CAD中已加载的.LISP.FAS.VLX文件中的所有已定义的全局变量的名称?

CADghost 发表于 2005-4-25 14:32:00

要知道你的变量名才行

peng197806 发表于 2005-4-25 14:44:00

可是想要的就是名称啊,为了防止再编的全局变量名称与原有的起冲突。比如一个程序中定义了全的全局变量名为"ASD",但是这个程序开CAD后没有执行过,那么"!ASD"返回的结果应该是NIL,我怎么才能知道这个ASD是被定义为全局变量了的呢?

meflying 发表于 2005-4-25 16:26:00

这个我也不知道怎么获得,不过我建议不要用全局变量,可以使用注册表,文件或系统变量等代替...


还有,如果还是要使用,取全局变量的时候取复杂一点,直观点,这样就很难重复

ZZXXQQ 发表于 2005-4-26 08:08:00

用(ATOMS-FAMILY 0)可以得到当前LISP中所有程序名和变量名的原子表,楼主只要对这个表中的名字用TYPE函数进行判断就行了。

meflying 发表于 2005-4-26 08:17:00

这个函数好象不指定,就不能返回自定义的函数和变量...如果指定了,用它就多余了

peng197806 发表于 2005-4-26 08:28:00

ZZXXQQ,不对啊,我试过了得不到全局变量,已赋值的跟未赋值的都得不到

ZZXXQQ 发表于 2005-4-26 09:08:00

试一下下面的程序


(DEFUN C:TEST ()<BR>        (SETQ ATO (ATOMS-FAMILY 0)<BR>                                               TL (LENGTH ATO)<BR>                                               I 0<BR>                                               BL (LIST))<BR>        (REPEAT TL<BR>       (IF (NUMBERP (EVAL (NTH I ATO)))<BR>               (SETQ BL (CONS (NTH I ATO) BL))<BR>       )<BR>       (SETQ I (1+ I))<BR>        )<BR>        (PRINC BL)<BR>        (PRINC)<BR>)

meflying 发表于 2005-4-26 09:37:00

(ATOMS-FAMILY 0)


返回的就没有自定义的东西啊,后面你再怎么弄这个返回的表,也不会把没有的东西弄出来吧

lijiao 发表于 2005-4-26 10:18:00

我这里有个程序可以达到楼主的要求(defun hs_list(funn / FL)
   (if (= funn "")
       (setq funn "*")
       )
   (setqfl (vl-remove-if-not
         (function (lambda (i) (wcmatch i (strcase funn))))
         (atoms-family 1)
         )
)
   )其中,自变量FUNN为字符串,可以带通配符。
页: [1] 2
查看完整版本: 如何获取已定义的全局变量名称?