मैं निम्नलिखित की तरह कुछ करने में सक्षम हो प्यार होता:क्या जंगली मैक्रो लिखना संभव है जो एक फ़ंक्शन/विधि हस्ताक्षर में विस्तारित होगा?
macro_rules! impl_a_method(
($obj:ident, $body:block) => (
fn a_method(foo: Foo, bar: Bar, baz: Baz) -> $obj $body
)
)
// Implementation would look like:
impl_a_method!(MyType, {
MyType {
foo: foo.blah(),
bar: bar.bloo(),
baz: baz.floozy(),
}
})
मेरे वास्तविक दुनिया उदाहरण सुविधाओं बहुत बड़ा हस्ताक्षर जो मैं 30+ विभिन्न प्रकार के अनूठे तरीके से लागू करने के लिए है के साथ तरीकों।
मैं ऊपर मैक्रो को कुछ इसी तरह की कोशिश की है, फिर भी मैं त्रुटियों जहां rustc समझता है foo
, bar
और baz
विस्तार स्थल पर अनसुलझे नाम में चलाने (हालांकि मुझे यकीन है कि मैक्रो घोषणा lexically उपयोग से पहले आती है हूँ)।
क्या ऐसा कुछ करना संभव है?
यदि नहीं, तो क्या आप ऐसे दृष्टिकोण की अनुशंसा कर सकते हैं जो कुछ समान प्राप्त करे?
अच्छा जवाब, बस कह रहा है कि मैं जंग के मैक्रोज़ के तरीके के प्रशंसक नहीं हूं। मैक्रोज़ का पूरा बिंदु यह है कि वे अंधेरे से पाठ को प्रतिस्थापित करते हैं, और "मैक्रो स्वच्छता" एक ऑक्सीमोरोन होता है। यह सिर्फ मुझे और अधिक वाक्यविन्यास से निपटने का कारण बन रहा है, जबकि मुझे कभी-कभी सी – sudo
"मैक्रो हाइजीन" में खतरनाक सामान करने में कोई परेशानी नहीं है, वास्तव में एक बहुत अच्छी तरह से परिभाषित विचार है: https://en.wikipedia.org/wiki/Hygienic_macro – solidsnack