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

mrt*_*dog 5 elisp

像错误调用的函数显示的错误消息,例如:

(message (file-attributes "."))
Run Code Online (Sandbox Code Playgroud)

产生消息:

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

你如何故意做这种类型的翻译,例如:

(message (thing-to-string (file-attributes ".")))
Run Code Online (Sandbox Code Playgroud)

发消息如下:

("/home14/tjones" 1 0 0 (20415 35598) (20211 19255) (20211 19255) 14 "lrwxrwxrwx" t ...)
Run Code Online (Sandbox Code Playgroud)

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

tri*_*eee 6

调查prin1-to-string和相关的功能(prin1,princ,等).并尝试手册!http://www.gnu.org/software/emacs/manual/html_node/elisp/Output-Functions.html


A. *_*evy 5

第一个参数message应该是一个格式字符串(与您传递给函数的字符串相同format。如果您给它格式“%s”(或Stefan的答案中的“%S”。)它会将您提供的任何内容字符串化将其作为下一个参数。

大写的 S 版本将对字符串中的字符进行转义,以便可以将其作为 s 表达式再次读取。在这种情况下,我认为这就是你想要的。因此,您不需要对代码进行太多更改即可获得您正在寻找的内容:

(message "%S" (file-attributes "."))
Run Code Online (Sandbox Code Playgroud)