summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuietMisdreavus <grey@quietmisdreavus.net>2017-03-17 09:30:29 -0500
committerQuietMisdreavus <grey@quietmisdreavus.net>2017-03-17 09:30:29 -0500
commit248d87a2dd3eec0dba93ef13f7a999940c9d4840 (patch)
treed6b401f1f43bd1545bcf5fd566436802901e5a1f
parent2079503b2185250e3bb59574a81a9908b445c821 (diff)
add macros examples
-rw-r--r--macros/macros1.rs62
-rw-r--r--macros/macros2.rs72
-rw-r--r--macros/macros3.rs74
3 files changed, 208 insertions, 0 deletions
diff --git a/macros/macros1.rs b/macros/macros1.rs
new file mode 100644
index 0000000..b2f48e4
--- /dev/null
+++ b/macros/macros1.rs
@@ -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`.
diff --git a/macros/macros2.rs b/macros/macros2.rs
new file mode 100644
index 0000000..040dc7f
--- /dev/null
+++ b/macros/macros2.rs
@@ -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.
diff --git a/macros/macros3.rs b/macros/macros3.rs
new file mode 100644
index 0000000..8d8da38
--- /dev/null
+++ b/macros/macros3.rs
@@ -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.