diff options
Diffstat (limited to 'exercises/macros')
| -rwxr-xr-x | exercises/macros/macros1.rs | 64 | ||||
| -rwxr-xr-x | exercises/macros/macros2.rs | 73 | ||||
| -rwxr-xr-x | exercises/macros/macros3.rs | 75 | ||||
| -rwxr-xr-x | exercises/macros/macros4.rs | 77 |
4 files changed, 289 insertions, 0 deletions
diff --git a/exercises/macros/macros1.rs b/exercises/macros/macros1.rs new file mode 100755 index 0000000..a7c78a5 --- /dev/null +++ b/exercises/macros/macros1.rs @@ -0,0 +1,64 @@ +// macros1.rs +// 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`. diff --git a/exercises/macros/macros2.rs b/exercises/macros/macros2.rs new file mode 100755 index 0000000..bc2e56b --- /dev/null +++ b/exercises/macros/macros2.rs @@ -0,0 +1,73 @@ +// macros2.rs +// 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. diff --git a/exercises/macros/macros3.rs b/exercises/macros/macros3.rs new file mode 100755 index 0000000..84c4308 --- /dev/null +++ b/exercises/macros/macros3.rs @@ -0,0 +1,75 @@ +// macros3.rs +// 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. diff --git a/exercises/macros/macros4.rs b/exercises/macros/macros4.rs new file mode 100755 index 0000000..d844bb0 --- /dev/null +++ b/exercises/macros/macros4.rs @@ -0,0 +1,77 @@ +// macros4.rs +// 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. |
