如何在数组中存储函数指针?

时间:2015-01-26 13:32:03

标签: arrays function-pointers rust

如何将函数(或函数指针)粘贴到数组中以进行测试?

fn foo() -> isize { 1 }
fn bar() -> isize { 2 }

fn main() {
    let functions = vec![foo, bar];
    println!("foo() = {}, bar() = {}", functions[0](), functions[1]());
}

Rust playground

中的此代码

这是我得到的错误代码:

error: mismatched types:
 expected `fn() -> isize {foo}`,
    found `fn() -> isize {bar}`
(expected fn item,
    found a different fn item) [E0308]

    let functions = vec![foo, bar];
                              ^~~

Rust虽然有相同的签名,但我将我的函数(值)视为不同的类型,我觉得这很令人惊讶。

1 个答案:

答案 0 :(得分:13)

最近在某些时候,由于我不记得的原因,每个功能都有自己独特的类型。 Upshot是你需要给编译器一个提示(注意functions上的类型):

fn foo() -> isize {
    1
}
fn bar() -> isize {
    2
}
fn main() {
    let functions: Vec<fn() -> isize> = vec![foo, bar];
    println!("foo() = {}, bar() = {}", functions[0](), functions[1]());
}

你也可以这样做:

let functions = vec![foo as fn() -> isize, bar];