我试图从位于结构for
中的函数返回一个位于impl
循环内的函数指针。
fn locate_func(&self, string: &str) -> fn() -> bool {
let mut func;
for alt in &self.alts {
return alt.func;
}
}
将来if
循环中会有一个for
语句,但是当我正在测试时,它看起来很通用,而且有点不合逻辑。
上面的代码在我的脑海中,应该返回指向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()
时导致的错误。由于上述代码无法正常工作,我显然遗漏了一些东西。任何提示?
答案 0 :(得分:5)
您的for
- 循环是函数内的最后一个表达式。编译器期望最后的表达式计算为返回类型。但是所有循环都计算为()
(单位或 void ),因此编译器在那里有经典的类型不匹配。
要问自己的正确问题是:如果循环中的return
不会被执行会发生什么(例如,因为循环根本没有被执行,因为self.alts
是空的)?这会导致问题,不是吗?
所以你必须在 for
- 循环之后返回一个有效的对象以涵盖这种情况。 但是如果您确定永远不会达到循环后的点,您可以使用unreachable!();
告诉编译器您已经知道的内容。但是,如果该计划将达到这个位置,它将会恐慌!所以最好确保,你肯定知道程序的行为方式。