:inline
機能により可変個の要素を、カスタマイゼーション型のlist
やvector
の途中にスプライス(splice:
継ぎ足す)することができます。list
やvector
記述を含む型にたいして:inline
t
を追加することによってこれを使用します。
list
やvector
型の仕様は、通常は単一の要素型を表します。しかしエントリーが:inline
t
を含むなら、マッチする値は含まれるシーケンスに直接マージされます。たとえばエントリーが3要素のリストにマッチするなら、全体が3要素のシーケンスになります。これはバッククォート構文(バッククォートを参照)の‘,@’に類似しています。
たとえば最初の要素がbaz
で、残りの引数は0個以上のfoo
かbar
でなければならないようなリストを指定するには、以下のカスタマイゼーション型を使用します:
(list (const baz) (set :inline t (const foo) (const bar)))
これは(baz)
、(baz foo)
、(baz bar)
、(baz foo
bar)
のような値にマッチします。
要素の型がchoice
なら、choice
自身の中で:inline
を使用せずに、choice
の選択肢(の一部)の中で使用します。たとえば最初がファイル名で始まり、その後にシンボルt
か2つの文字列を続けなければならないようなリストにマッチさせるには、以下のカスタマイゼーション型を使用します:
(list file (choice (const t) (list :inline t string string)))
選択においてユーザーが選択肢の1つ目を選んだ場合はリスト全体が2つの要素をもち、2つ目の要素はt
になります。ユーザーが2つ目の候補を選んだ場合にはリスト全体が3つの要素をもち、2つ目と3つ目の要素は文字列でなければなりません。
ウィジェットは:match-inline
要素でインライン値がウィジェットにマッチするかどうかを告げる述語を指定できます。