「フラグメント指定子」です。全てのフラグメント指定子の一覧はこの章で後ほど紹介します。囲むと0個以上のコンマで句切られた式にマッチします。特別なマッチャ構文は別にして、マッチャ中に登場するその他の任意のトークンはそれ自身に正確にマッチする必要があります。`z`展開マクロルールの右辺は大部分が通常のRustの構文です。マッチャによってキャプチャされた構文を繋げる事ができます。マクロ展開中の繰り返しはマッチャ中の繰り返しと足並みを揃えて実行されます(これについてはもう少し説明します)。区切りのコンマは繰り返し演算子の一部には含めません。そのかわり、繰り返しブロックをセミコロンを用いて閉じます。括弧のペアを右辺に含みます。かわりに使うことができます。括弧は単純に右辺を区切るために利用されています。内側の括弧は展開結果の一部です。マクロは式を必要としているコンテキストで利用されていることを思いだしてください。束縛を含む式を書きたいときにはブロックを利用します。マクロが単一の式に展開されるときは、追加の括弧は必要ありません。した事はないという点に注意してください。事実、それはマクロを式として利用するまでは決定されません。注意深くすれば、複数のコンテキストで適切に展開されるマクロを書く事ができます。データ型の短縮形は、式としてもパターンとしても正しく動作します。ついて足並みを揃えて動作します。内側になければなりません。中に表われた際には適切に複製されます。26]);}上のコードはほとんどのマッチャの構文を利用しています。代わりに利用する事ができます。どちらも補助的に区切りを指定する事ができます。以外の任意のトークンを指定することが可能です。健全性いくつかの言語に組込まれているマクロは単純なテキストの置換を用いています、しかしこれは多くの問題を発生させます。なり、乗算は加算よりも優先度が高くなります。C言語のマクロを頻繁に利用しているなら、この問題を避けるためのイディオムを5、6個は知っているでしょう。Rustではこのような問題を恐れる必要はありません。一つの式の頂点としてパースされ、構文木上の位置は置換されたあとも保存されます。他のマクロシステムで良くみられる問題は、「変数のキャプチャ」です。Rustの式のブロックをエミュレートするために利用しています。この問題は、print文が両方の変数を参照する必要があるために起こります。Rustにおける同様のマクロは期待する通りの動作をします。それぞれの変数はその変数が導入された構文コンテキストでタグ付けされます。異なる「色」で塗られているためにコンフリクトしないという風に考える事ができます。この健全性のシステムはマクロが新しい束縛を呼出時に導入する事を制限します。x);}呼出時に渡す事で正しい構文コンテキストでタグ付けされるように、代わりに変数名を呼出時に渡す必要があります。ついては適用されません。x();}再帰的マクロマクロの展開は、展開中のマクロ自身も含めたその他のマクロ呼出しを含んでいることが可能です。そのようにすると時々、直接コンパイルした場合よりもより良いエラーメッセージを得ることができます。出力結果のコード自体は、元のコードと意味が変わってくる場合があります。ようにすることで、構文コンテキストについて知ることができます。マクロのデバッグを補助する2つの構文拡張を提供しています。今のところは、それらの構文は不安定であり、フィーチャーゲートを必要としています。与えられた引数をコンパイル時に標準入力に出力し、展開結果は何も生じません。展開の終わりごろに用いることで、メッセージの出力をオフにできます。してパースすることができます。このような特性はテキストエディタや、その他のコードを処理するツールにとって非常に便利です。このような特性はRustのマクロシステムの設計にも影響を及ぼしています。Rustはこの曖昧性を判定するために単純なルールを利用します。foo!(...);その他の展開前にパース可能である事による制約はマクロ呼出は正しいRustトークンで構成されている必要があるというものです。そのうえ、括弧や、角カッコ、波括弧はマクロ呼出し中でバランスしてなければなりません。これによってRustはマクロ呼出しがどこで終わっているかを知ることができます。厳密に言うと、マクロ呼出しの本体は「トークンの木」のシーケンスである必要があります。囲まれたトークンの木、あるいは、その他の単一のトークンマッチャ内部ではそれぞれのメタ変数はマッチする構文を指定する「フラグメント指定子」を持っています。