全局变量不那么全局?
我有一个阿卡多克。具有以下代码段的lsp例程:文本窗口中的结果为:
调用文件中用于定义全局变量的代码如下:
当我试图单独运行例程时,我得到以下结果:
我该怎么做才能让它工作?
格雷格 未定义函数“defvar”。在您得到的代码片段中,应该有一个(defun defvar…)密码 我想你在找SetEnv函数?这将向寄存器中添加一个自定义变量,因此其全局可访问。但这与全局autolisp变量不同。。。
啊。好啊
那么,这可以设置一个可以在其他例程中更改的变量吗?
(setvar "insulationtyp" "QQQ")
Greg
如果有疑问,你可以自己试试。将其粘贴到命令行以查看其功能。 对不起,我在上一个帖子中犯了一个错误。。。
使用(setenv“MYVARIABLENAME”1)时(仅允许字符串)
然后变量MYVARIABLENAME存储在寄存器中。
使用(getenv“MYVARIABLENAME”)可以再次获得值。在本例中为“1”。
由于该变量存储在寄存器中,因此所有其他lisp例程都可以调用它。
重新启动AutoCAD时,变量将保留在那里。它也可以在所有DWG文件中访问。
当在一个文件中更改时,所有文件都会更改。
使用AutoLisp“全局变量”时,通常会出现以下情况:
例如:
(defun C:TEST ( / )
(setq testvariable "blablabla")
(princ)
)
变量“testvariable”现在是一个全局变量,可以被samen DWG文件中的其他LISP接受。
重新启动AutoCAD时,此变量将消失,因为它永远不会存储。
使用时:
(defun C:TEST ( / testvariable )
(setq testvariable "blablabla")
(princ)
)
现在testvariable被设置为一个局部变量,当函数完成时,该局部变量被删除,因此,其他lisp程序无法再访问该局部变量。。。
希望这有意义。:-) 好啊我不认为setvar是我想要的,因为它设置了一个系统变量。
以下是我想做的:
[列表=1]
[*]在acaddoc中设置全局变量。lsp
[*]从acaddoc调用“例程X”。更改全局变量的lsp
[*]princ“例程X”运行后的全局变量
[/列表]
我想我已经很接近了,但我仍然有语法错误。
格雷格 更好地阅读我的帖子。我说的是setENV,而不是setVAR。
你的愿望。。
方法一:
在阿卡多克。lsp:
5
或方法2:
6
使用方法一,关闭DWG时,全局变量丢失。
使用方法二,全局变量存储在寄存器中,并存储用于下一个会话。。 同样,IMO“defvar”是一个自定义函数,它是从某个地方复制的,因此GregLeason在没有任何进一步了解的情况下发布了一个带有代码片段的问题。
函数名不能像Aftertouch建议的setenv那样容易出错。下一个问题可能是“你是说defun吗?”。
因此,对于基本问题,只需发布完整的代码或源代码链接。 好啊我想怎么做就怎么做。
我想我迷路的地方是我对全局变量的理解。
除非用defun声明将变量定义为程序的局部变量,否则“看起来”变量是全局的。这在某种程度上是一种范式转变,因为我认为所有变量都是局部的,除非显式地成为全局的。我的想法正确吗?
格雷格
页:
[1]
2