mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-05-29 00:38:05 +00:00
32 lines
602 B
Rust
32 lines
602 B
Rust
|
// ./src/macros/variadics.md
|
||
|
|
||
|
|
||
|
macro_rules! calculate {
|
||
|
// The pattern for a single `eval`
|
||
|
(eval $e:expr) => {
|
||
|
{
|
||
|
let val: usize = $e; // Force types to be integers
|
||
|
println!("{} = {}", stringify!{$e}, val);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Decompose multiple `eval`s recursively
|
||
|
(eval $e:expr, $(eval $es:expr),+) => {{
|
||
|
calculate! { eval $e }
|
||
|
calculate! { $(eval $es),+ }
|
||
|
}};
|
||
|
}
|
||
|
|
||
|
fn part0() {
|
||
|
calculate! { // Look ma! Variadic `calculate!`!
|
||
|
eval 1 + 2,
|
||
|
eval 3 + 4,
|
||
|
eval (2 * 3) + 1
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub fn main() {
|
||
|
part0();
|
||
|
}
|
||
|
|