gpt4 book ai didi

rust - 从 for 循环内部返回导致类型不匹配

转载 作者:行者123 更新时间:2023-11-29 07:57:37 24 4
gpt4 key购买 nike

我试图从位于结构的 impl 中的函数返回位于 for 循环内的函数指针。

fn locate_func(&self, string: &str) -> fn() -> bool {
let mut func;

for alt in &self.alts {
return alt.func;
}
}

以后在for循环中会有一个if语句,但是我现在正在测试,它看起来很通用,有点不合逻辑.

在我看来,上面的代码应该返回指向 alt.func() 的指针,这显然是一个指针,正如它告诉我的那样,我应该删除它的返回和分号行。

error[E0308]: mismatched types
--> src\main.rs:42:3
|
42 | for alt in &self.alts
| ^ expected fn pointer, found ()
|
= note: expected type `fn() -> bool`
= note: found type `()`

以上是运行locate_func()时出现的错误。由于上述代码无法正常工作,我显然遗漏了一些东西。有什么提示吗?

最佳答案

您的 for 循环是函数内的最后一个表达式。编译器期望最后一个 expression 计算返回类型。但是所有循环的计算结果都是 ()(unitvoid),因此编译器在那里存在典型的类型不匹配。

问自己的正确问题是:如果循环内的 return 不执行会发生什么(例如,因为循环根本没有执行,因为 self.alts 是空的)?这会导致问题,不是吗?

因此您必须在for 循环 之后返回一个有效对象以涵盖这种情况。 但是如果您确定永远不会到达循环之后的位置,您可以使用unreachable!(); 告诉编译器您已经知道的内容。然而,如果程序到达这个位置,它就会崩溃!因此,最好确保您确切知道程序的行为方式。

关于rust - 从 for 循环内部返回导致类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41288979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com