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

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];

Rust相关问答推荐

Rust中的相互递归特性与默认实现

为什么我的梅森素数代码的指数越大,速度就越快?

在Rust中赋值变量有运行时开销吗?

修改切片/引用数组

替换可变引用中的字符串会泄漏内存吗?

如何在递归数据 struct 中移动所有权时变异引用?

根据填充系数以相对大小在给定空间中布局项目

应为关联类型,找到类型参数

是否可以在不直接重复的情况下为许多特定类型实现一个函数?

如何限制 GtkColumnView 行数

Button.set_hexpand(false) 不会阻止按钮展开

无法将`&Vec>`转换为`&[&str]`

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

为什么要这样编译?

从嵌入式 Rust 中的某个时刻开始经过的时间

我什么时候应该使用特征作为 Rust 的类型?

为什么会出现无法移出可变引用后面的 `self.x`错误?

更好的方法来模式匹配带有 Rust 的窥视孔装配说明窗口?

相交着色器从 SSBO 中读取零

编写 TOML 文件以反序列化为 struct 中的枚举