< 返回版块

Klad 发表于 2022-07-27 22:30

Tags:Rust, macro

    let t: i32 = input.trim().parse().unwrap();
    match t {
        1 => f1(),
        2 => f2(),
        3 => f3(),
        4 => f4(),
        5 => f5(),
        6 => f6(),
        7 => f7(),
        8 => f8(),
        9 => f9(),
        10 => f10(),
        11 => f11(),
        12 => f12(),
        13 => f13(),
        14 => f14(),
        _ => return,
    }

变成类似这样的:

my_macro!(/* Something */)

评论区

写评论
作者 Klad 2022-07-28 21:29

Ok, 谢谢老哥

--
👇
苦瓜小仔: 如果已经有 f1 ... fn,也无需宏

fn main() {
    let input = "2";
    let t: i32 = input.trim().parse().unwrap();

    if let 1..=4 = t {
        FN[t as usize - 1]()
    }
}

fn f1() {}
fn f2() {}
fn f3() {}
fn f4() {}
const FN: [fn(); 4] = [f1, f2, f3, f4];

还是那句话,取决于你想简化什么。

--
👇
xh1109: 他的意思是 1 对应 f1 ,2 对应 f2 ,……,n-1 对应 fn-1 ,n 对应 fn,

苦瓜小仔 2022-07-28 12:52

如果已经有 f1 ... fn,也无需宏

fn main() {
    let input = "2";
    let t: i32 = input.trim().parse().unwrap();

    if let 1..=4 = t {
        FN[t as usize - 1]()
    }
}

fn f1() {}
fn f2() {}
fn f3() {}
fn f4() {}
const FN: [fn(); 4] = [f1, f2, f3, f4];

还是那句话,取决于你想简化什么。

--
👇
xh1109: 他的意思是 1 对应 f1 ,2 对应 f2 ,……,n-1 对应 fn-1 ,n 对应 fn,

xh1109 2022-07-28 10:58

他的意思是 1 对应 f1 ,2 对应 f2 ,……,n-1 对应 fn-1 ,n 对应 fn,

--
👇
苦瓜小仔: 甚至不必使用宏

fn main() {
    let input = "2";
    let t: i32 = input.trim().parse().unwrap();

    match t {
        // 或者 1..=14 => f(t),
        n @ 1..=14 => f(n),
        _ => return,
    }
}

fn f(n: i32) { println!("{n}") }
苦瓜小仔 2022-07-28 10:39

甚至不必使用宏

fn main() {
    let input = "2";
    let t: i32 = input.trim().parse().unwrap();

    match t {
        // 或者 1..=14 => f(t),
        n @ 1..=14 => f(n),
        _ => return,
    }
}

fn f(n: i32) { println!("{n}") }
苦瓜小仔 2022-07-27 22:53

取决于你想简化什么。仅对此例:使用 seq-macro

1 共 5 条评论, 1 页