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