Macro nar_dev_utils::f_parallel

source ·
macro_rules! f_parallel {
    [
        // 要被调用的函数(标识符)
        $($path:ident).+;
        // 参数的表达式序列 // ! ↓此处必须限制为「+」,不然无法实现「尾后分号」(会引发解析歧义)
        $( $( $arg:expr $(,)? )+ );* $(;)?
    ] => { ... };
    [
        @inner
        // 要被调用的函数(标识符)
        $f:tt
        // 参数的表达式序列的序列
        $( [ $($arg:expr,)* ] )*
    ] => { ... };
    [
        @inner_expand
        // 要被调用的函数(标识符)
        [ $($f:tt)* ]
        // 参数的表达式序列
        [ $($arg:expr,)* ]
    ] => { ... };
}
Expand description

平行将参数填充进函数

  • 📄形式:f_parallel![add3; 1 2 3; 4 5 6] => [add3(1, 2, 3), add3(4, 5, 6)]

§Example

use nar_dev_utils::f_parallel;
fn add3(a: i32, b: i32, c: i32) -> i32 {
    a + b + c
}
let m = f_parallel![
    add3;
    1 2 3; // add3(1, 2, 3)
    4 5 6; // add3(4, 5, 6)
    7, (8) 9; // add3(7, 8, 9) // ! 📌此处使用逗号避免「调用歧义」`7(8)`
];
assert_eq!(m, [6, 15, 24]);