यहाँ मैं क्या चाहते हैं के एक सिंथेटिक उदाहरण है:मैक्रोज़ में वैकल्पिक पिछला कॉमा कैसे अनुमति दें?
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, });
क्यों कि से परेशान (,) * मैक्रो पैटर्न में बंद ब्रेस से ठीक पहले? एक नियम, और पीछे की ओर अल्पविराम के लिए काम करता है ... एस। ठीक है, तो यह spec के बाहर * थोड़ा * है, लेकिन पुनरावृत्ति पर कटौती। –
@ डीके। मुख्य कारण यह है कि मुझे एहसास नहीं हुआ कि आप ऐसा कर सकते हैं ;-) मुझे पूरी तरह से क्रांतिकारी उत्तर की तरह लगता है; कृपया इसे जोड़ें! – Shepmaster
एह, आप पहले यहां थे, और आप पहले से ही चार अर्थहीन इंटरनेट अंक प्राप्त कर चुके हैं। दोनों में से सर्वश्रेष्ठ के लिए एक विकल्प के रूप में इसे संपादित करने के लिए तेज़ी से। –