在指定条件下,我想在此函数中打印函数名称。但我不知道如何得到它。在 C++ 中,我可以使用预处理器宏__FUNCTION__
。我在 AutoLISP 中有类似的东西吗?
问问题
1073 次
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 回答