Autolisp 用户函数重载

Autolisp user function overloading

您可以在 AutoCAD 知识网站上阅读此内容:
"Note: You can define multiple user functions with the same name, but have each definition accept a different number or type of arguments."
有人用过这个功能吗?我试过了,但根本不起作用。 我只能调用最新定义的 function.If 我这样调用 (file::AppendFile arg1) 然后 autocad 说我给出的参数太少

我不在安装了 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 而不是他们的价值观。

虽然丑了点,但不失为一种选择

"Note: You can define multiple user functions with the same name, but have each definition accept a different number or type of arguments."

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

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