Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Варіативні інтерфейси

Варіативний інтерфейс приймає довільну кількість аргументів. Наприклад, println! може приймати довільну кількість аргументів, як визначає рядок форматування.

Ми можемо розширити наш макрос calculate! із попереднього розділу, щоб він був варіативним:

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 main() {
    calculate! { // Look ma! Variadic `calculate!`!
        eval 1 + 2,
        eval 3 + 4,
        eval (2 * 3) + 1
    }
}

Вивід:

1 + 2 = 3
3 + 4 = 7
(2 * 3) + 1 = 7