7
は、私が何をしたいの合成例を示しますマクロでオプションの後続カンマを許可するにはどうすればよいですか?ここ
macro_rules! define_enum {
($Name:ident { $($Variant:ident),* }) => {
pub enum $Name {
None,
$($Variant),*,
}
}
}
define_enum!(Foo { A, B });
このコードはコンパイルされ、それにカンマを追加した場合:
define_enum!(Foo { A, B, });
// ^
コンパイルが失敗しました。私はそれを修正することができます:
($Name:ident { $($Variant:ident,)* })
// ^
が、その後define_enum!(Foo { A, B });
は失敗し、
は、どのように私は両方のケースを処理するためのマクロを記述する必要があります
define_enum!(Foo { A, B });
define_enum!(Foo { A, B, });
あなたは '$(、)を使用することができるのに、なぜそれを気に* 'マクロパターンの閉じ括弧の直前? 1つのルールは、コンマの後ろに機能します。さて、それはspec *の* little *ですが、繰り返しに大いに削減します。 –
@DK。主な理由は、私があなたがそれを行うことができると気付かなかったからです;-)私にとって完全に激しい答えのように聞こえます。それを追加してください! – Shepmaster
あなたは最初にここにいました。あなたはすでに無意味なインターネットポイントを4つ持っています。両方の中で最高の選択肢としてあなたのものを編集するのが早い。 –