返回泛型函数指针的函数

dav*_*ler 0 rust

说我有两个功能:

fn function_with_one_argument(one: i64) -> bool{
    one==one // irrelevant
}

fn function_with_two_arguments(one: i64, two: i64) -> bool {
    one==two // irrelevant
}
Run Code Online (Sandbox Code Playgroud)

给定不同的输入值,我想返回一个不同的函数指针:

fn main() {
    println!("\n\n{:?}\n\n", get_function_pointer(1)(321));
    println!("{:?}", get_function_pointer(2)(321/*, 321*/));
}
Run Code Online (Sandbox Code Playgroud)

如何表示返回值以返回指向不同形状函数的指针?

fn get_function_pointer(id: i64) -> /***/(fn(i64) -> bool)/***/ {
    match id {
        1 => function_with_one_argument,
        // 2 => function_with_two_arguments, /*How do we make this work?*?
        _ => panic!("!?!?!")
    }
}
Run Code Online (Sandbox Code Playgroud)

bas*_*gnr 5

您可以使用枚举来表示函数的输出

enum Either<T, U> {
    Left(T),
    Right(U),
}

fn function_with_one_argument(one: i64) -> bool {
    one == one // irrelevant
}

fn function_with_two_arguments(one: i64, two: i64) -> bool {
    one == two // irrelevant
}

fn get_function_pointer(id: i64) -> Either<fn(i64) -> bool, fn(i64, i64) -> bool> {
    match id {
        1 => Either::Left(function_with_one_argument),
        2 => Either::Right(function_with_two_arguments),
        _ => panic!("!?!?!"),
    }
}
Run Code Online (Sandbox Code Playgroud)