но в чём проблема у меня?
                  
                  
                  rust
                  
                  
                  macro_rules! chain_references {
                  
                  
                      ($value:expr, $depth:expr) => {
                  
                  
                          {
                  
                  
                              let mut reference = &$value;
                  
                  
                              for _ in 0..$depth {
                  
                  
                                  reference = &reference;
                  
                  
                              }
                  
                  
                              reference
                  
                  
                          }
                  
                  
                      };
                  
                  
                  }
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  fn main(){
                  
                  
                      let a=chain_references!(418, 1000);
                  
                  
                      println!("{:?}", a);
                  
                  
                      
                  
                  
                  }
                  
                  
                
Что данный код должен делать?
должен создать указатель на указатель на указатель 1000 раз на число 418
А где проблему вы видите?
принтлн выводит 418, а не &&&&&&&&&&&&&&&&&&&&...418
let a = &&&5; println!("{}", a); что по вашему должен вывести этот код?
выводит 5. но даже с форматером {:?}
потому что происходит автоматический дереференс. ссылки как таковые просто не умеют печататься
https://docs.rs/seq-macro/latest/seq_macro/ let r = &value; seq!(N in 0..1000 { let r = &r; }) *r
а для чего вообще такое издевательство нужно? или это просто ради эксперимента?
Обсуждают сегодня