diff options
Diffstat (limited to 'rustlings/exercises/21_macros')
| -rw-r--r-- | rustlings/exercises/21_macros/README.md | 15 | ||||
| -rw-r--r-- | rustlings/exercises/21_macros/macros1.rs | 10 | ||||
| -rw-r--r-- | rustlings/exercises/21_macros/macros2.rs | 10 | ||||
| -rw-r--r-- | rustlings/exercises/21_macros/macros3.rs | 13 | ||||
| -rw-r--r-- | rustlings/exercises/21_macros/macros4.rs | 15 |
5 files changed, 63 insertions, 0 deletions
diff --git a/rustlings/exercises/21_macros/README.md b/rustlings/exercises/21_macros/README.md new file mode 100644 index 0000000..de7fb7b --- /dev/null +++ b/rustlings/exercises/21_macros/README.md @@ -0,0 +1,15 @@ +# Macros + +Rust's macro system is very powerful, but also kind of difficult to wrap your +head around. We're not going to teach you how to write your own fully-featured +macros. Instead, we'll show you how to use and create them. + +If you'd like to learn more about writing your own macros, the +[macrokata](https://github.com/tfpk/macrokata) project has a similar style +of exercises to Rustlings, but is all about learning to write Macros. + +## Further information + +- [The Rust Book - Macros](https://doc.rust-lang.org/book/ch20-05-macros.html) +- [The Little Book of Rust Macros](https://veykril.github.io/tlborm/) +- [Rust by Example - macro_rules!](https://doc.rust-lang.org/rust-by-example/macros.html) diff --git a/rustlings/exercises/21_macros/macros1.rs b/rustlings/exercises/21_macros/macros1.rs new file mode 100644 index 0000000..fb3c3ff --- /dev/null +++ b/rustlings/exercises/21_macros/macros1.rs @@ -0,0 +1,10 @@ +macro_rules! my_macro { + () => { + println!("Check out my macro!"); + }; +} + +fn main() { + // TODO: Fix the macro call. + my_macro(); +} diff --git a/rustlings/exercises/21_macros/macros2.rs b/rustlings/exercises/21_macros/macros2.rs new file mode 100644 index 0000000..2d9dec7 --- /dev/null +++ b/rustlings/exercises/21_macros/macros2.rs @@ -0,0 +1,10 @@ +fn main() { + my_macro!(); +} + +// TODO: Fix the compiler error by moving the whole definition of this macro. +macro_rules! my_macro { + () => { + println!("Check out my macro!"); + }; +} diff --git a/rustlings/exercises/21_macros/macros3.rs b/rustlings/exercises/21_macros/macros3.rs new file mode 100644 index 0000000..9537494 --- /dev/null +++ b/rustlings/exercises/21_macros/macros3.rs @@ -0,0 +1,13 @@ +// TODO: Fix the compiler error without taking the macro definition out of this +// module. +mod macros { + macro_rules! my_macro { + () => { + println!("Check out my macro!"); + }; + } +} + +fn main() { + my_macro!(); +} diff --git a/rustlings/exercises/21_macros/macros4.rs b/rustlings/exercises/21_macros/macros4.rs new file mode 100644 index 0000000..9d77f6a --- /dev/null +++ b/rustlings/exercises/21_macros/macros4.rs @@ -0,0 +1,15 @@ +// TODO: Fix the compiler error by adding one or two characters. +#[rustfmt::skip] +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); +} |