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

标签 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 将我的函数(值)视为不同的类型,这让我感到惊讶。

最佳答案

最近某个时候,每个函数都被赋予了自己的、不同的类型,原因……我不记得了。结果是您需要给编译器一个提示(注意 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];

关于arrays - 如何将函数指针存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061819/

相关文章:

rust - 什么是重新借用,它如何影响编译器生成的代码?

rust - 如何在Rust中返回链式迭代器

java - Java 中的选择排序,我可以如何改进代码?

arrays - 如何在 Ruby 中将单字符串数组解析为哈希值?

c++ - 在 C++ 中访问指向指针的指针

rust - 在结构中嵌入具有生命周期的变量

python - 过滤 numpy 数组以仅保留给定值的一行

Javascript 数组查找效率 : associative vs. 存储关联?

c++ - 为什么我在包含加载程序 header 时无法使用 OpenGL 函数?

c++ - 为什么 C++ 函数的地址总是 True?