utoLISP 早期版本的兼容性 在 AutoCAD 2000 或更高版本中有一个新的 AutoLISP 解释器。这个新版本的 AutoLISP 纠正了旧版本中存在的某些问题,并修改了某些函数的执行方式。 因为可以在 AutoCAD 中同时打开多个图形文档,所以 AutoCAD 处理自定义文件(例如 acad.lsp)的方式必须改变。这些处理方式的改变可控制打开新图形时 AutoCAD 加载哪些自定义文件。有关使用自定义文件的详情,请参见 Customization Guide 中的“Automatically Load and Execute AutoLISP Routines”。 符号保护 当 Visual LISP 运行时,保护的符号(例如 T)被真正保护,如果试图修改这些符号将出现错误信息。关于符号保护如何工作的信息,请参见 Visual LISP Developer's Guide 中“Using the AutoLISP Language”的“AutoLISP Basics”。 函数不再被内部定义为表 函数不再被内部定义为表。如果有依赖函数表结构的代码,则可以使用 DEFUN-Q、DEFUN-Q-LIST-SET 和 DEFUN-Q-LIST-REF 函数以保持后向兼容性。关于使用这些函数的信息,请参见联机 AutoLISP Reference。 AutoLISP 错误信息已更改 在 AutoCAD 中许多 AutoLISP 错误信息文本已更改。这可能会影响依赖错误字符串内容的任何 AutoLISP 代码。 整数溢出可以被转换为实数 AutoLISP 的早期版本处理整数溢出(大于 2147483647 的正数,小于 -2147483648 的负数)的方法是返回负数或生成随机数。在 AutoCAD 2000 和更高版本中,AutoLISP 处理整数溢出的方式有所不同。如果输入的数大于最大允许整数,则 AutoLISP 将此整数转换为实数。但是,如果对两个有效的整数执行数学运算,并且结果大于最大允许整数,则结果数字无效。关于 AutoLISP 如何处理整数溢出的详细信息,请参见 Visual LISP Developer's Guide 第八章中的“AutoLISP Data Types”。 最小整数稍有不同 AutoLISP 允许的最小整数值现在为 -2147483647。在 AutoCAD R14 中,最小整数值是 -2147483648。 符号表名称中保留大小写 在 AutoCAD R14 和早期版本中,符号表名称条目在创建时被自动转换为大写。在 AutoCAD 2000 或更新版本中,AutoLISP 保留符号表名称的大小写。在现有的应用程序中,如果使用区分大小写的符号表名称字符串比较,可能会导致冲突。可能需要修改应用程序,使字符串不区分大小写。 如果将函数作为参数传递给 ObjectARX defun'd 函数,将返回错误 AutoLISP 始终不允许将函数作为参数传递给 ObjectARX defun'd 函数,但以前此操作并不返回错误信息。在 AutoCAD 2000 或更高版本中,如果将函数作为参数传递给 ObjectARX defun'd 函数,AutoLISP 将显示以下错误信息: *** ERROR:doesn't fit in resbuf:# 在特殊格式的运算符位置不允许使用表达式 某些 AutoLISP 函数被认为是“特殊的格式”,因为它们计算参数的方式与大多数 AutoLISP 函数调用不同。通?a href='http://www.kxcad.net'>:扑闼乃胁问L厥獾母袷?a href="http://www.cadx.cn">(例如 IF、AND、COND 和 SETQ)不计算所有参数,或只在某些条件下才计算某些参数。在 AutoLISP 早期版本中,将计算到特殊格式的表达式放在运算符位置是合法的。在 AutoCAD 2000 和更高版本中,不支持这种做法。例如,在 AutoCAD R14 中下列函数调用的结果: 命令:((if t if) nil (princ 1) (princ 2)) |