Merge pull request #57 from QuietMisdreavus/macros

add macros examples
This commit is contained in:
Carol (Nichols || Goulding) 2017-03-19 10:08:42 -04:00 committed by GitHub
commit 133892fc4e
4 changed files with 284 additions and 0 deletions

62
macros/macros1.rs Normal file
View file

@ -0,0 +1,62 @@
// Make me compile! Scroll down for hints :)
macro_rules! my_macro {
() => {
println!("Check out my macro!");
};
}
fn main() {
my_macro();
}
// When you call a macro, you need to add something special compared to a regular function call. If
// you're stuck, take a look at what's inside `my_macro`.

72
macros/macros2.rs Normal file
View file

@ -0,0 +1,72 @@
// Make me compile! Scroll down for hints :)
fn main() {
my_macro!();
}
macro_rules! my_macro {
() => {
println!("Check out my macro!");
};
}
// Macros don't quite play by the same rules as the rest of Rust, in terms of what's available
// where.
// Unlike other things in Rust, the order of "where you define a macro" versus "where you use it"
// actually matters.

74
macros/macros3.rs Normal file
View file

@ -0,0 +1,74 @@
// Make me compile, without taking the macro out of the module! Scroll down for hints :)
mod macros {
macro_rules! my_macro {
() => {
println!("Check out my macro!");
};
}
}
fn main() {
my_macro!();
}
// In order to use a macro outside of its module, you need to do something special to the module to
// lift the macro out into its parent.
// The same trick also works on "extern crate" statements for crates that have exported macros, if
// you've seen any of those around.

76
macros/macros4.rs Normal file
View file

@ -0,0 +1,76 @@
// Make me compile! Scroll down for hints :)
macro_rules! my_macro {
() => {
println!("Check out my macro!");
}
($val:expr) => {
println!("Look at this other macro: {}", $val);
}
}
fn main() {
my_macro!();
my_macro!(7777);
}
// You only need to add a single character to make this compile.
// The way macros are written, it wants to see something between each "macro arm", so it can
// separate them.