2015-05-30 10 views
5

Perché this:Le macro non espandono gli alberi di token interpolati?

macro_rules! a_macro { 
    ($($a:tt)+) => ($($a)+); 
} 

fn main() { 
    let x:u32 = 1; 
    let y:u32 = a_macro!(-x); 
} 

non riescono a compilare con

<anon>:2:23: 2:25 error: unexpected token: `an interpolated tt` 
<anon>:2  ($($a:tt)+) => ($($a)+); 
           ^~ 
playpen: application terminated with error code 101 

risposta

5

Il perché è: ma non è implementato. Questa è una limitazione nota (a partire da Rust 1.0). tt argomenti per macro are useful, ma devono essere sempre inoltrati a macro quando utilizzati.

+0

Questo mi rattrista. Speravo di creare combinatori con macro, e l'incapacità di restituire i token lo rende doloroso. :-( – user

+0

@user: i macros sono molto work in progress al momento, già incredibilmente utili, ma neanche così flessibili come potrebbero essere. –

+0

@MatthieuM. Non lamentarsi dei loro limiti tanto quanto desiderare cronologia degli ordini per utilizzare la spettacolare ruggine del futuro. MrGreen – user

Problemi correlati