samifox 发表于 2022-7-5 23:03:40

自定义系统变量

你好
 
我使用了很多预定义的全局变量来控制程序流。我想知道autolisp如何引用同名的变量和函数?
 

(setq
                       
REBARLOWERDIA
"3£16" ;_REBAR UPPER DIAMETER

)


(defun c:REBARLOWERDIA ()
(setq        REBARLOWERDIA
(getString (strcat "Set rebar diameter and frequncy ["
                  REBARLOWERDIA
                  "]"
          )
)
)
)


 
应该是这样吗?
 
谢谢
谢伊

MSasu 发表于 2022-7-5 23:11:07

一种良好的编程实践是使用星号构建全局变量名,以方便区分它们:
(setq *REBARLOWERDIA*
   "3£16" ;_REBAR UPPER DIAMETER
)

samifox 发表于 2022-7-5 23:15:37

 
thanx公司
我想知道autolisp如何引用同名的变量和函数?

cwake 发表于 2022-7-5 23:20:15

简而言之,如果尝试为函数和全局变量使用相同的符号名,则不会起作用(注意-注释位于图形文档名称空间的上下文中,这就是您所指的名称空间)。
符号将包含您上次将其设置为的任何内容,例如字符串、实数、整数或函数。它不可能同时是两件事。
 
 
如果你在理解这一点时感到困惑,也许你还没有意识到“C:REBARLOWERDIA”与“REBARLOWERDIA”指的是不同的符号。

BlackBox 发表于 2022-7-5 23:27:12

FWIW-
 
你也可能会对布拉格马感兴趣。
 
干杯

samifox 发表于 2022-7-5 23:34:48

我的代码写得正确吗?

Bhull1985 发表于 2022-7-5 23:41:03

我不确定你的问题samifox,你是在问你做得对吗?
看起来是这样。。。。
如果您想看看autolisp是否区分了“C:REBARLOWERDIA”和“REBARLOWERDIA”,那么正如clint所提到的那样,是的。如果我理解正确的话,它们是两个不同的原子。

samifox 发表于 2022-7-5 23:45:15

你好
 
我正在为自己的全局变量编写一个函数(如setVar()),以便根据需要轻松更新它们。
 
我的问题是在不调用全局变量的情况下访问全局变量,这是我迄今为止编写的代码,
 
谢谢
谢伊
 

(defun setValue        (var val)
(if (= (type var) 'STR)
    (set var (getstring (strcat "Enter new value for ["var"]<"'existValue">")))
   )
)

(setq
   *upperRebarTitle*        "3£12" ;_REBAR UPPER DIAMETER
) ;_ end of setq


(defun C:UPRREBARTLT ()
(setValue "UPRREBARTLT" "3x20")
) ;_ end of defun

MSasu 发表于 2022-7-5 23:48:48

我会这样写:
(defun setValue( var val / tmp1 tmp2 )
(if (not val)
(progn
(or (setq tmp1 (eval (read var)))
      (setq tmp1 "3£12"))
(set (read var)
       (if (/= (setq tmp2
                     (getstring (strcat "Enter new value for [" var "] <" tmp1 ">")))
               "")
      tmp2
      tmp1))
)
(set (read var) val)
)
(princ)
)
 
 
调用直接设置值:
(setValue "*upperRebarTitle*" "3x20")
调用以通过用户输入设置值:
(setValue "*upperRebarTitle*" nil)
如果变量未初始化,默认值将使用“3£12”。

samifox 发表于 2022-7-5 23:53:49

 
你好,MSasu,
 
试图理解这个魔法是如何实现的,
这是评估:
 

(set (read var) val)
(set (read var) "3x20")
(set *upperRebarTitle* "3x20")

 
现在如果我使用
 

(set var val)

 
没有(读)我会出错,为什么?
页: [1] 2
查看完整版本: 自定义系统变量