2017-08-01 7 views
-1

Lorsque je tente de compiler ce code à l'aide rustc main.rs:"aucune règle devrait le jeton" lors de la rédaction d'une déclaration `let` dans une macro

macro_rules! getPI { 
    let pi = 3.141592; 
    println!("Pi is roughly 3.142 \n {0}", pi); 
} 

fn main() { 
    print!(getPI); 
} 

il me donne une erreur:

error: no rules expected the token `pi` 
--> src/main.rs:2:9 
    | 
2 |  let pi = 3.141592; 
    |   ^^ 

Je suis très nouveau à la programmation, j'espère que quelqu'un a une solution.

+1

Pourquoi voulez-vous que ce soit une macro? – sepp2k

+0

@ sepp2k Test autour. –

Répondre

3

Si vous êtes "très nouveau pour la programmation", alors vous devriez commencer au début; les macros sont pas le début. Revenez en arrière et relisez The Rust Programming Language, second edition, même si elle cible les personnes qui comprennent déjà un autre langage de programmation.

Vous pouvez alors lire the chapter from the first edition about macros. Cela vous montrera la syntaxe appropriée pour les macros. Les macros ont un certain nombre d'armes, comme une déclaration match:

macro_rules! getPI { 
    () => { 
     let pi = 3.141592; 
     println!("Pi is roughly 3.142 \n {0}", pi); 
    } 
} 

fn main() { 
    getPI!(); 
} 

Je ne sais pas aussi pourquoi vous souhaitez essayer de print! la valeur de retour de votre macro, alors j'ai enlevé cela. Vous devez également appeler la macro à l'aide d'un point d'exclamation (!).