具有相同全局变量的少数lisp
大家好!我在visual lisp+opendcl中开发了两个程序。不幸的是,我对几个全局变量使用了相同的名称。这导致如果我打开另一个程序,第一个程序不再工作,我必须再次加载它。有没有办法解决这个问题,或者我必须更改两个程序中的每个变量名?
谢谢你的提示,
丹尼斯 尽可能避免使用全局变量。许多程序员根本不使用它们。必要时,使其具有明确的描述性,与函数名相同。虽然我已经用过几次了,但如果你有带有多个全局变量的代码,你可能会想发布它,看看你会得到什么建议。 由于lisp是一个文本文件,您可以编写一个lisp来读取lisp文件并查找“(setq”,然后将其更改为“(setq ML”和行的其余部分,即制作一个lisp文件的副本,将ML添加到每个变量中,还可以查看重新定义局部变量名的代码开头。(/x y等)
我支持这一点。(1+)
例如,如果一个整数的全局变量被分配给*int*符号,并且在MyProgram1中使用相同的变量,那么最好将其命名为*MyProgram1\u int*或类似的名称,因此符号名称足够描述性。
或者将其写入注册表,再次使用描述性名称(我看到李·麦克在他的程序中这样做)。 保留全局变量,但在LISP开始时重置它们,会有什么错误吗?
例如,我使用“acount”来计算事物,因此在使用它的地方,我还添加(sstq帐户0) 如果使用字符串,也可以使用setenv:(setenv“MyGlobal”1)
如果没有将“acount”设置为全局变量的所有问题,将“acount”设置为局部变量不会做完全相同的事情吗?使用全局变量的唯一原因是,下次在同一任务的同一图形中使用时,其值可用。 是的,Tombu它会的——然而,有时保持计数也很有用(不仅在LISPS中,而且在excel宏和co-on中),但我将其作为一个简单的例子。
在不知道原始posters全局变量在做什么的情况下,这可能是一个对他有效的解决方案
不仅仅是字符串。。。如果你知道自己在做什么:
; Example to define custom program, by writing it into the registry:
(setenv "MyProgram"
(vl-prin1-to-string
'(lambda ( / p )
(and
(setq p (getpoint "\nSpecify point: "))
(alert (strcat "\nSpecified point: " (vl-prin1-to-string p)))
)
)
)
)
"(LAMBDA (/ P) (AND (SETQ P (GETPOINT \"\\nSpecify point: \")) (ALERT (STRCAT \"\\nSpecified point: \" (VL-PRIN1-TO-STRING P)))))"
_$ (eval (read (strcat "(" (getenv "MyProgram") ")"))) ; Run the program
nil
; Example to store custom variables, by using assoc list (to keep a single registry-name):
_$ (setenv "MyVariables" (vl-prin1-to-string '((var1 60)(var2 120)(var3 PI))))
"((VAR1 60) (VAR2 120) (VAR3 PI))"
_$ (eval (cadr (assoc 'var3 (read (getenv "MyVariables")))))
3.14159 同意。。应该已经澄清了书写字符串。我保持了这个例子的简单性,以避免混淆OP。如果你知道自己在做什么,那么可以对数据进行评估。很好的例子。
页:
[1]
2