您可以在AutoCAD知识网站上阅读:
注:您可以使用相同的名称定义多个用户函数,但让每个定义接受不同数量或类型的参数。
有人用过这个功能吗?我试过了,但根本不起作用。我只能调用最近定义的function.If,像这样调用(file::AppendFile arg1),然后autocad说我给出的论据太少了

发布于 2018-01-02 16:35:47
注:您可以使用相同的名称定义多个用户函数,但让每个定义接受不同数量或类型的参数。
这在AutoLISP中是不可能的:最后一个defun表达式将覆盖名称空间中符号的所有先前定义,因此,在您的示例中,file:AppendFile函数需要两个参数,因为第二个defun表达式将立即重新定义该函数。
提供两个参数(除了提供不同长度的参数列表)的唯一方法是在计算第二个file:AppendFile表达式之前计算defun函数。
发布于 2017-08-18 22:33:12
我不在安装了AutoCAD的计算机上,所以我无法检查AutoLISP是否按照文档规定的方式工作,但我知道我已经看到了将可变数量的参数传递给函数的变通方法。
诀窍是将所有参数作为一个列表传递,然后在函数的正文中处理该列表。例如:
(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,而不是它们的值。
有点丑,但这是个选择。
https://stackoverflow.com/questions/45751766
复制相似问题