字符串除了存储其包含的字符本身,还可以为这些字符保存文本属性。这使得在字符串与缓冲区之间复制文本的程序,可以无需额外处理就同步复制文本的属性。关于文本属性的含义,See Text Properties。带有文本属性的字符串使用一种特殊的读取与打印语法:
#("characters" property-data...)
其中 property-data属性数据 由零个或多个元素组成,每三个为一组,格式如下:
beg end plist
beg 和 end 都是整数,它们共同指定字符串中的一段下标区间;plist 是该区间对应的属性列表。例如:
#("foo bar" 0 3 (face bold) 3 4 nil 4 7 (face italic))
表示一个文本内容为 ‘foo bar’ 的字符串,其中:前三个字符拥有 face 属性,值为 bold(粗体);最后三个字符拥有 face 属性,值为 italic(斜体)。(第四个字符没有任何文本属性,因此它的属性列表为 nil。实际上,属性列表为 nil 的区间不必显式写出,因为任何没有在任何区间中声明的字符,默认都不带属性。)