5

就像错误调用函数的错误消息一样,例如:

(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 ...)

这仅用于调试/信息。我假设有一种方法作为消息正在这样做,但这会暴露给我们用户吗?

4

3 回答 3

6

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

于 2012-05-25T14:38:32.733 回答
3

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

于 2012-05-26T13:40:30.653 回答
3

的第一个参数message应该是一个格式字符串(与传递给format函数的那个​​相同。如果你给它格式“%s”(或Stefan 的回答中的“%S”。)它将把你给的任何东西都串起来它作为下一个论点。

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

(message "%S" (file-attributes "."))
于 2016-12-02T22:53:48.077 回答