乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 55|回复: 11

[编程交流] 一个LIS中的多次执行

[复制链接]

49

主题

1246

帖子

1210

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
254
发表于 2022-7-6 08:24:59 | 显示全部楼层 |阅读模式
我为缺乏术语提前道歉。
 
我知道我以前见过这样做,但我想确保这(1)是可能的,(2)是最好的方法。我可以有一个LISP例程,它有多个“程序”,您可以通过加载一个文件来单独执行这些程序吗?举个例子:
 
我想把我正在研究的一些东西结合起来,我只是想确保我走的是正确的道路。提前谢谢。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:30:55 | 显示全部楼层
您正走在正确的道路上,但应按以下方式进行编码:
 
  1. (defun c:Cmd1
  2.    (command "command_1")
  3. )
  4. (defun c:Cmd2
  5.    (command "command_2")
  6. )
  7. (defun c:Cmd3
  8.    (command "command_3")
  9. )

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

使用道具 举报

49

主题

1246

帖子

1210

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
254
发表于 2022-7-6 08:41:03 | 显示全部楼层
啊,有道理。所以,这也适用于我的阿卡多克。LSP文件,对吗?我是否可以只加载一个LISP文件,而不是当前的配置:
或者将我使用的每一个例程包含到一个LISP文件中是不是太过分了?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:42:35 | 显示全部楼层
当然,LISP文件可以包含您想要/需要的任意多个函数定义。
 
作为加载LISP文件的一点背景:
加载LISP文件时,文件中的表达式都会按照它们在文件中的显示顺序进行计算。通常,LISP文件只包含“defun”表达式,因此这些函数是在加载文件并计算“defun”表达式时定义的(注意,这只是定义函数,而不是计算函数本身)。但本质上,文件中的任何LISP表达式都将被评估(例如,当在函数定义之外找到“princ”表达式时加载消息,因此在加载文件时进行评估)。
 
考虑到这一点,请注意,在您的示例中,只有在命令行中键入“test”后,才会定义“Cmd1”、“Cmd2”和“Cmd3”-此时,将计算“test”函数定义中的表达式,即“Cmd1”、“Cmd2”和“Cmd3”的“defun”表达式。
 
替代方案:
 
  1. (defun c:test ( )
  2. ... test function expressions ...
  3. )
  4. (defun c:Cmd1 ( )
  5. ... Cmd1 function expressions ...
  6. )
  7. (defun c:Cmd2 ( )
  8. ...
  9. )
  10. etc.

 
使用上述结构,“test”、“Cmd1”、“Cmd2”和“Cmd3”的“defun”表达式将在加载时进行计算,加载后所有四个命令都可用。
 
(希望这篇文章不要太混乱)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

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

使用道具 举报

49

主题

1246

帖子

1210

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
254
发表于 2022-7-6 08:56:09 | 显示全部楼层
啊,我想我明白了。在我的示例中,您指出,在我进行类型测试之前,其他函数将无法工作,因为它们尚未进行评估。 
有道理。那样的话,我就不做了。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:59:19 | 显示全部楼层
以下是我经常使用的场景:
 
在acad中。lsp或acaddoc。lsp或者他们今天叫它什么的
 
  1. 4

 
这样,您只在实际需要程序时加载开销。
 
-大卫
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 09:03:31 | 显示全部楼层
David,r12中是否没有自动加载?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:11:12 | 显示全部楼层
艾伦,
 
不,autoload在旧版本中经历了各种形式和化身。到阿卡多克的时候。lsp出现了,你需要让每个版本都有自己的自动加载。就像每次发布新版本时都要重新编译arx一样。这是一种痛苦,所以我从来没有这样溃败-大卫
 
PS-我的外部应用程序自动加载程序:
  1. 5
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 09:16:04 | 显示全部楼层
啊,好的。有道理。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-8 09:47 , Processed in 1.310541 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表