asen 发表于 2011-8-29 08:41:56

LISP也能实现函数重载

cond或if的条件中使用type,numberp等函数,LISP也能模仿C++函数的重载功能,函数参数数量只能有一个定值,以下举例说明:
;;HGCAD.COM
;;以dxf索引取出对应dxf值,可以接受某一对象的图元名或图元表。
(defun HG-GetDXF (en-el dxf)
   (cond ((= (type en-el) 'ENAME) (cdr (assoc dxf (entget en-el))))
            ((= (type en-el) 'LIST)(cdr (assoc dxf en-el)))
            (t nil)
   )
)

以下是type函数返回值:

数据类型type 函数返回的数据类型说明
ENAME图元名
EXRXSUBR外部 ObjectARX 应用程序
FILE文件描述符
INT整数
LIST表
PAGETB函数分页表
PICKSET选择集
REAL浮点数
SAFEARRAY安全数组
STR字符串
SUBR内部 AutoLISP 函数或由编译(FAS 或 VLX)文件加载的函数从 AutoCAD 命令提示中加载的 LISP 源文件函数也可能作为 SUBR 出现。
SYM符号
VARIANT变体
USUBR从 LISP 中加载的用户定义函数
VLA-objectActiveX 对象


来源 http://hgcad.com/blog-2-34.html

baitang36 发表于 2021-8-9 17:10:11

十年前的帖子竟然还不过时

NetBee 发表于 2021-8-7 21:07:19

参数数量是硬伤,所以只能用表传入。
页: [1]
查看完整版本: LISP也能实现函数重载