15.4.3 列表内拼接

:inline 特性允许你将**可变数量**的元素**拼接**到 listvector 自定义类型的中间。使用方法是:在包含于 listvector 内部的 某个类型规范中添加 :inline t

通常,listvector 类型规范中的每一项都描述**单个**元素类型。 但当某一项包含 :inline t 时,它所匹配的值会**直接合并**到外层序列中。 例如,如果该项匹配一个包含三个元素的列表,这三个元素会直接成为整个序列的三个元素。 这类似于反引用结构中的 ‘,@’(see 反引号)。

例如,要指定一个列表,其第一个元素必须是 baz, 剩余参数可以是零个或多个 foobar,可使用如下自定义类型:

(list (const baz) (set :inline t (const foo) (const bar)))

它可以匹配如 (baz)(baz foo)(baz bar)(baz foo bar) 这样的值。

当元素类型为 choice 时,:inline 不应写在 choice 本身, 而应写在 choice 的(部分)备选选项中。 例如,要匹配一个以文件名开头,后面紧跟符号 t 或两个字符串的列表,可使用:

(list file
      (choice (const t)
              (list :inline t string string)))

如果用户选择 choice 中的第一个备选项,则整个列表有两个元素,第二个元素是 t。 如果用户选择第二个备选项,则整个列表有三个元素,第二个和第三个必须是字符串。

界面组件可以通过 :match-inline 指定谓词, 用于判断一个内联值是否匹配该组件。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike