自定义系统变量
你好我使用了很多预定义的全局变量来控制程序流。我想知道autolisp如何引用同名的变量和函数?
(setq
REBARLOWERDIA
"3£16" ;_REBAR UPPER DIAMETER
)
(defun c:REBARLOWERDIA ()
(setq REBARLOWERDIA
(getString (strcat "Set rebar diameter and frequncy ["
REBARLOWERDIA
"]"
)
)
)
)
应该是这样吗?
谢谢
谢伊 一种良好的编程实践是使用星号构建全局变量名,以方便区分它们:
(setq *REBARLOWERDIA*
"3£16" ;_REBAR UPPER DIAMETER
)
thanx公司
我想知道autolisp如何引用同名的变量和函数? 简而言之,如果尝试为函数和全局变量使用相同的符号名,则不会起作用(注意-注释位于图形文档名称空间的上下文中,这就是您所指的名称空间)。
符号将包含您上次将其设置为的任何内容,例如字符串、实数、整数或函数。它不可能同时是两件事。
如果你在理解这一点时感到困惑,也许你还没有意识到“C:REBARLOWERDIA”与“REBARLOWERDIA”指的是不同的符号。 FWIW-
你也可能会对布拉格马感兴趣。
干杯 我的代码写得正确吗? 我不确定你的问题samifox,你是在问你做得对吗?
看起来是这样。。。。
如果您想看看autolisp是否区分了“C:REBARLOWERDIA”和“REBARLOWERDIA”,那么正如clint所提到的那样,是的。如果我理解正确的话,它们是两个不同的原子。 你好
我正在为自己的全局变量编写一个函数(如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
我会这样写:
(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”。
你好,MSasu,
试图理解这个魔法是如何实现的,
这是评估:
(set (read var) val)
(set (read var) "3x20")
(set *upperRebarTitle* "3x20")
现在如果我使用
(set var val)
没有(读)我会出错,为什么?
页:
[1]
2