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
函数。
您可以在 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
函数。