您可以在AutoCAD知识网站上阅读:
“注意:您可以使用相同的名称定义多个用户函数,但每个定义都接受不同数量或类型的参数。”
有人使用这个功能吗?我试过但根本不工作。
我只能调用最新定义的函数。如果我这样调用(file::AppendFile arg1)
那么autocad说我的参数太少了
答案 0 :(得分:2)
我没有安装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))
形式。
它有点难看,但它是一种选择。
答案 1 :(得分:1)
“注意:您可以使用相同的名称定义多个用户函数,但每个定义都接受不同数量或类型的参数。”
这在AutoLISP中是不可能的:评估的最后一个defun
表达式将覆盖命名空间中符号的所有先前定义 - 因此,在您的示例中,file:AppendFile
函数将需要两个参数,如第二个defun
表达式将立即重新定义该函数。
提供两个参数(除了提供不同长度的参数列表)之外的唯一方法是在评估第二个file:AppendFile
表达式之前评估defun
函数。