首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs lisp;如何从任何类型的变量生成字符串?

Emacs lisp;如何从任何类型的变量生成字符串?
EN

Stack Overflow用户
提问于 2012-05-25 21:56:10
回答 3查看 2.8K关注 0票数 5

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

代码语言:javascript
复制
(message (file-attributes "."))

生成消息:

代码语言:javascript
复制
"eval: Wrong type argument: stringp, ("/home14/tjones" 1 0 0 (20415 35598) (20211 19255) (20211 19255) 14 "lrwxrwxrwx" t ...)"

你如何有意识地做这种类型的翻译,例如:

代码语言:javascript
复制
(message (thing-to-string (file-attributes ".")))

要发送类似以下内容的消息:

代码语言:javascript
复制
("/home14/tjones" 1 0 0 (20415 35598) (20211 19255) (20211 19255) 14 "lrwxrwxrwx" t ...)

这仅用于调试/信息。我假设有一种方法,因为message正在做这件事,但这对我们用户来说是公开的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-25 22:38:33

查看prin1-to-string和相关函数(prin1princ等)。一定要试试手册!http://www.gnu.org/software/emacs/manual/html_node/elisp/Output-Functions.html

票数 6
EN

Stack Overflow用户

发布于 2012-05-26 21:40:31

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

票数 3
EN

Stack Overflow用户

发布于 2016-12-03 06:53:48

message的第一个参数应该是一个格式字符串(与传递给format函数的字符串相同。如果你给它的格式是"%s“(或者像Stefan's answer.中的"%S”),它会把你给它的任何东西字符串化为下一个参数。

大写的S版本将对字符串中的字符进行转义,以便可以将其再次读取为s表达式。在这种情况下,我认为这就是您想要的。因此,你不需要过多地修改代码就能得到你想要的东西:

代码语言:javascript
复制
(message "%S" (file-attributes "."))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10755677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档