tzframpton 发表于 2022-7-6 08:24:59

一个LIS中的多次执行

我为缺乏术语提前道歉。
 
我知道我以前见过这样做,但我想确保这(1)是可能的,(2)是最好的方法。我可以有一个LISP例程,它有多个“程序”,您可以通过加载一个文件来单独执行这些程序吗?举个例子:
 
我想把我正在研究的一些东西结合起来,我只是想确保我走的是正确的道路。提前谢谢。

Hippe013 发表于 2022-7-6 08:30:55

您正走在正确的道路上,但应按以下方式进行编码:
 
(defun c:Cmd1
   (command "command_1")
)

(defun c:Cmd2
   (command "command_2")
)

(defun c:Cmd3
   (command "command_3")
)

 
所有内容都可以在一个lisp文件中。

tzframpton 发表于 2022-7-6 08:41:03

啊,有道理。所以,这也适用于我的阿卡多克。LSP文件,对吗?我是否可以只加载一个LISP文件,而不是当前的配置:
或者将我使用的每一个例程包含到一个LISP文件中是不是太过分了?

Lee Mac 发表于 2022-7-6 08:42:35

当然,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”表达式将在加载时进行计算,加载后所有四个命令都可用。
 
(希望这篇文章不要太混乱)

Lee Mac 发表于 2022-7-6 08:48:10

 
我怀疑您是否会看到性能上的差异:您正在计算相同数量的LISP表达式来定义命令,只是它们都位于一个文件中,而不是单独的文件中。
 
然而,大多数用户将程序保存在单独的文件中,并在ACADDOC中使用“加载”语句或“自动加载”语句。lsp,因为每个程序在其自己的文件中被划分,并且更易于管理(尤其是在将程序更新到新版本时)。

tzframpton 发表于 2022-7-6 08:56:09

啊,我想我明白了。在我的示例中,您指出,在我进行类型测试之前,其他函数将无法工作,因为它们尚未进行评估。 
有道理。那样的话,我就不做了。

David Bethel 发表于 2022-7-6 08:59:19

以下是我经常使用的场景:
 
在acad中。lsp或acaddoc。lsp或者他们今天叫它什么的
 
4
 
这样,您只在实际需要程序时加载开销。
 
-大卫

alanjt 发表于 2022-7-6 09:03:31

David,r12中是否没有自动加载?

David Bethel 发表于 2022-7-6 09:11:12

艾伦,
 
不,autoload在旧版本中经历了各种形式和化身。到阿卡多克的时候。lsp出现了,你需要让每个版本都有自己的自动加载。就像每次发布新版本时都要重新编译arx一样。这是一种痛苦,所以我从来没有这样溃败-大卫
 
PS-我的外部应用程序自动加载程序:
5

alanjt 发表于 2022-7-6 09:16:04

啊,好的。有道理。
页: [1] 2
查看完整版本: 一个LIS中的多次执行