struct P0{} impl P0{ fn write(self:&Self,pin:usize){ std::println!("Writing port P0 on pin {}",pin); } } struct P1{} impl P1{ fn write(self:&Self,pin:usize){ std::println!("Writing port P1 on pin {}",pin); } } macro_rules! for_each_port_pin{ ($port:ident,$pin:ident,$b:block, $(($e1:expr,$e2:expr)),*) =>{ $( let $port = $e1; let $pin = $e2; $b );* } } fn main(){ let p0 = P0{}; let p1 = P1{}; for_each_port_pin!(port,pin, {port.write(pin);}, (&p0,10usize),(&p1,7usize) ); }