在指定的条件下,我想在此功能中打印功能名称。但我不知道如何得到它。
在C ++中,我可以使用预处理器宏__FUNCTION__
。我在AutoLISP中有类似的东西吗?
答案 0 :(得分:0)
这绝对是可能的。让我们看看两种情况:
1)您正在编写该功能。
这应该很简单,只需定义一个与函数同名的变量,你就可以了。 (如上面的评论所述。)
您甚至可以使用比函数的实际名称更具描述性的内容。可以调用(defun af () ...)
"令人敬畏的功能"而不是" 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)
函数可用于任何可以打印的类型,并始终返回一个字符串。如果您不知道自己是否有数字或单词等,那就太棒了。
希望有所帮助!
P.S。我在编写测试函数时首先使用了这种技术。发送一个函数和一个期望值,它将测试它是否按预期工作 - 包括将函数的名称作为字符串的一部分打印出来。如果您有时间设置测试,这非常有用。