message
函数类似于+
函数,message
函数接受可变数量的参数。它用于向用户发送消息,非常实用,我们将在这里描述它。
消息将被打印在回显区。例如,通过评估以下列表,您可以在回显区中打印一条消息:
(message "This message appears in the echo area!")
双引号之间的整个字符串是一个单一的参数,并被整体打印出来。(请注意,在这个例子中,消息本身将在回显区中用双引号括起来;这是因为您看到了message
函数返回的值。在您编写的程序中,message
的大多数用法将作为副作用将文本在回显区中打印出来,而不带引号。See multiply-by-seven
in
detail, 了解其中的一个示例。)
然而,如果在带引号的字符字符串中有一个‘%s’,message
函数不会像这样打印‘%s’,而是查看跟随字符串的参数。它评估第二个参数,并在字符串中‘%s’的位置打印该值。
您可以通过将光标定位在以下表达式之后,然后键入C-x C-e来查看这一点:
(message "The name of this buffer is: %s." (buffer-name))
在Info中,"The name of this buffer is: *info*."
将出现在回显区。函数 buffer-name
返回缓冲区的名称作为字符串,message
函数将其插入到 %s
的位置。
要将值以整数形式打印,可以使用 ‘%d’,与 ‘%s’ 的使用方式相同。例如,要在回显区中打印一条消息,指出 fill-column
的值,请评估以下内容:
(message "The value of fill-column is %d." fill-column)
在我的系统上,当我评估这个列表时,"The value of fill-column is 72."
将出现在我的回显区5。
如果在引用的字符串中有多个 ‘%s’,则在第一个 ‘%s’ 的位置打印跟在引用字符串后的第一个参数的值,并在第二个 ‘%s’ 的位置打印第二个参数的值,依此类推。
例如,如果你评估以下内容,
(message "There are %d %s in the office!" (- fill-column 14) "pink elephants")
你的回显区将显示一条相当奇特的消息。在我的系统上,它会显示,"There are 58 pink elephants in the office!"
。
表达式(- fill-column 14)
被评估,生成的数字插入到‘%d’的位置;双引号中的字符串"pink elephants"
被视为单个参数,插入到‘%s’的位置。(也就是说,双引号之间的字符串评估为它本身,就像一个数字一样。)
最后,这里有一个稍微复杂的例子,不仅说明了一个数字的计算,而且还展示了如何在一个表达式中使用另一个表达式来生成替代‘%s’的文本:
(message "He saw %d %s" (- fill-column 32) (concat "red " (substring "The quick brown foxes jumped." 16 21) " leaping."))
在这个例子中,message
有三个参数:字符串"He saw %d %s"
,表达式(- fill-column 32)
,以及以concat
函数开头的表达式。通过评估(- fill-column 32)
生成的值插入到‘%d’的位置;以及通过评估以concat
开头的表达式生成的值插入到‘%s’的位置。
当你的填充列为70时,评估这个表达式,消息"He saw 38 red foxes leaping."
将出现在你的回显区。