guohq 发表于 2021-4-10 07:12:57

怎样判断一个命令是Lisp命令还是ARX命令

使用(defun c:xxx())    或commandmethod("xxx")都可以定义一个新的命令并在命令行中运行,但使用Lisp调用时,却不同。


使用defun 定义的命令,在lisp中的调用方法为 (c:xxx)

使用 commandmethod 定义的命令,在lisp中的调用方法为(command "xxx")


问题:怎样通过代码去判断,一个命令是由Lisp定义的,还是由commandmethod 定义的?

vitalgg 发表于 2021-4-10 11:30:40

(= 'subr (type c:xxx))

guohq 发表于 2021-4-10 17:51:21

测试通过,谢谢!

satan421 发表于 2021-4-11 00:18:42

SUBR, EXRXSUBR, and USUBR
The name of the function (the name that was specified in defun or at load time). SUBR refers to internal and compiled functions, EXRXSUBR refers to external ARX functions, and USUBR identifies user-defined functions.

guohq 发表于 2021-4-11 10:42:05

使用Lisp定义的命令可以使用 (= 'subr (type c:xxx)) ,使用ARX定义的命令,只能返回nil,不知道怎么判断。

vitalgg 发表于 2021-4-14 10:16:48

(if (= 'subr (type c:xxx))
   "LISP 命令"
   "非LISP命令")

guohq 发表于 2021-4-16 09:11:46

vitalgg 发表于 2021-4-14 10:16
(if (= 'subr (type c:xxx))
   "LISP 命令"
   "非LISP命令")

此判断有点欠妥,对于没有定义的命令,也会返回 非LISP命令

sieben 发表于 2021-4-16 09:12:41

学习了 !
页: [1]
查看完整版本: 怎样判断一个命令是Lisp命令还是ARX命令