一个LIS中的多次执行
我为缺乏术语提前道歉。我知道我以前见过这样做,但我想确保这(1)是可能的,(2)是最好的方法。我可以有一个LISP例程,它有多个“程序”,您可以通过加载一个文件来单独执行这些程序吗?举个例子:
我想把我正在研究的一些东西结合起来,我只是想确保我走的是正确的道路。提前谢谢。 您正走在正确的道路上,但应按以下方式进行编码:
(defun c:Cmd1
(command "command_1")
)
(defun c:Cmd2
(command "command_2")
)
(defun c:Cmd3
(command "command_3")
)
所有内容都可以在一个lisp文件中。 啊,有道理。所以,这也适用于我的阿卡多克。LSP文件,对吗?我是否可以只加载一个LISP文件,而不是当前的配置:
或者将我使用的每一个例程包含到一个LISP文件中是不是太过分了? 当然,LISP文件可以包含您想要/需要的任意多个函数定义。
作为加载LISP文件的一点背景:
加载LISP文件时,文件中的表达式都会按照它们在文件中的显示顺序进行计算。通常,LISP文件只包含“defun”表达式,因此这些函数是在加载文件并计算“defun”表达式时定义的(注意,这只是定义函数,而不是计算函数本身)。但本质上,文件中的任何LISP表达式都将被评估(例如,当在函数定义之外找到“princ”表达式时加载消息,因此在加载文件时进行评估)。
考虑到这一点,请注意,在您的示例中,只有在命令行中键入“test”后,才会定义“Cmd1”、“Cmd2”和“Cmd3”-此时,将计算“test”函数定义中的表达式,即“Cmd1”、“Cmd2”和“Cmd3”的“defun”表达式。
替代方案:
(defun c:test ( )
... test function expressions ...
)
(defun c:Cmd1 ( )
... Cmd1 function expressions ...
)
(defun c:Cmd2 ( )
...
)
etc.
使用上述结构,“test”、“Cmd1”、“Cmd2”和“Cmd3”的“defun”表达式将在加载时进行计算,加载后所有四个命令都可用。
(希望这篇文章不要太混乱)
我怀疑您是否会看到性能上的差异:您正在计算相同数量的LISP表达式来定义命令,只是它们都位于一个文件中,而不是单独的文件中。
然而,大多数用户将程序保存在单独的文件中,并在ACADDOC中使用“加载”语句或“自动加载”语句。lsp,因为每个程序在其自己的文件中被划分,并且更易于管理(尤其是在将程序更新到新版本时)。 啊,我想我明白了。在我的示例中,您指出,在我进行类型测试之前,其他函数将无法工作,因为它们尚未进行评估。
有道理。那样的话,我就不做了。 以下是我经常使用的场景:
在acad中。lsp或acaddoc。lsp或者他们今天叫它什么的
4
这样,您只在实际需要程序时加载开销。
-大卫 David,r12中是否没有自动加载? 艾伦,
不,autoload在旧版本中经历了各种形式和化身。到阿卡多克的时候。lsp出现了,你需要让每个版本都有自己的自动加载。就像每次发布新版本时都要重新编译arx一样。这是一种痛苦,所以我从来没有这样溃败-大卫
PS-我的外部应用程序自动加载程序:
5 啊,好的。有道理。
页:
[1]
2