首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autolisp用户功能重载

Autolisp用户功能重载
EN

Stack Overflow用户
提问于 2017-08-18 08:13:40
回答 2查看 347关注 0票数 3

您可以在AutoCAD知识网站上阅读:

注:您可以使用相同的名称定义多个用户函数,但让每个定义接受不同数量或类型的参数。

有人用过这个功能吗?我试过了,但根本不起作用。我只能调用最近定义的function.If,像这样调用(file::AppendFile arg1),然后autocad说我给出的论据太少了

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-02 16:35:47

注:您可以使用相同的名称定义多个用户函数,但让每个定义接受不同数量或类型的参数。

这在AutoLISP中是不可能的:最后一个defun表达式将覆盖名称空间中符号的所有先前定义,因此,在您的示例中,file:AppendFile函数需要两个参数,因为第二个defun表达式将立即重新定义该函数。

提供两个参数(除了提供不同长度的参数列表)的唯一方法是在计算第二个file:AppendFile表达式之前计算defun函数。

票数 2
EN

Stack Overflow用户

发布于 2017-08-18 22:33:12

我不在安装了AutoCAD的计算机上,所以我无法检查AutoLISP是否按照文档规定的方式工作,但我知道我已经看到了将可变数量的参数传递给函数的变通方法。

诀窍是将所有参数作为一个列表传递,然后在函数的正文中处理该列表。例如:

代码语言:javascript
复制
(defun myFunction (argsList / path header)
  (setq path (car argsList))
  (setq header (cadr argsList))
  (someFunction path "a" header)
)

..。然后使用(myFunction '("arg1"))(myFunction '("arg1" "arg2"))调用函数。

请注意,在上面的示例中,我使用的是列表构造函数文字,因此它将传入实际的字符串"arg1""arg2"。如果要传递变量的内容,则需要使用表单(myFunction (list var1 var2)),因为(myfunction '(var1 var2))将传递符号'var1'var2,而不是它们的值。

有点丑,但这是个选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45751766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档