summaryrefslogtreecommitdiff
path: root/exercises/macros
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/macros')
-rwxr-xr-xexercises/macros/macros1.rs64
-rwxr-xr-xexercises/macros/macros2.rs73
-rwxr-xr-xexercises/macros/macros3.rs75
-rwxr-xr-xexercises/macros/macros4.rs77
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.