0

在指定条件下,我想在此函数中打印函数名称。但我不知道如何得到它。在 C++ 中,我可以使用预处理器宏__FUNCTION__。我在 AutoLISP 中有类似的东西吗?

4

1 回答 1

0

这绝对是可能的。我们来看两种情况:

1)您正在编写函数。

这应该很容易,只需定义一个与函数同名的变量就可以了。(如上面的评论中所讨论的。)

您甚至可以使用比函数的实际名称更具描述性的名称。(defun af () ...)可以称为“Awesome Function”而不是“af”。

我还建议使用标准的常量值格式:用下划线分隔单词的大写字母。(setq FUNCTION_NAME "AwesomeFunction"). (这就像PI为你设置的那样,你不应该改变它——它是一个常数。)

2)您正在调用一个在代码运行之前您可能不知道其名称的函数。

这方面的一些例子:

(apply someFunctionInThisVariable '(1 2 3))

(mapcar 'printTheNameOfAFunction '(+ setq 1+ foreach lambda))

(eval 'anotherFunctionInAVariable)

要打印存储在变量中的函数的名称 - 像这样(setq function 'myFunction)- 您需要使用该(vl-princ-to-string)函数。

(vl-princ-to-string function)   ;; Returns "MYFUNCTION"
(strcase (vl-princ-to-string function) T)   ;; Returns "myfunction"

(princ
   (strcase 
      (vl-princ-to-string function)
      T
   )
)            ;; Command line reads: myfunction

(vl-princ-to-string)函数可以用于任何可以打印的类型,并且总是返回一个字符串。如果您不知道您是否有数字或单词等,那就太好了。

希望有帮助!

PS 我在编写测试函数时第一次使用了这种技术。向它发送一个函数和一个预期值,它会测试它是否按预期工作 - 包括将函数的名称作为字符串的一部分打印出来。如果您有时间设置测试,这将非常有用。

于 2016-07-27T03:13:09.573 回答