Emacs lisp;如何从任何类型的变量创建一个字符串?

时间:2012-05-25 13:56:10

标签: elisp

与错误调用的函数显示的错误消息类似,例如:

(message (file-attributes "."))

制作消息:

"eval: Wrong type argument: stringp, ("/home14/tjones" 1 0 0 (20415 35598) (20211 19255) (20211 19255) 14 "lrwxrwxrwx" t ...)"

如何有意识地进行此类翻译,例如:

(message (thing-to-string (file-attributes ".")))

发消息:

("/home14/tjones" 1 0 0 (20415 35598) (20211 19255) (20211 19255) 14 "lrwxrwxrwx" t ...)

这仅用于调试/信息。我假设有一种方式,因为消息正在这样做,但这是否暴露给我们的用户?

2 个答案:

答案 0 :(得分:6)

查看prin1-to-string及相关功能(prin1princ等)。并尝试手册! http://www.gnu.org/software/emacs/manual/html_node/elisp/Output-Functions.html

答案 1 :(得分:2)

在您的示例中,message没有做任何事情(它只是拒绝运行),因此字符串的转换是由read-eval-print循环完成的,它捕获了错误并将其转换为文本消息。 但是,message也可以这样做,并且通过调用内部使用format等内容的prin1-to-string来实现。 所以(format "%S" <foo>)会做你的事情 - 字符串。