D. *_*aro 3 type-mismatch rust
我试图for从位于implstruct 的函数中返回位于循环内的函数指针。
fn locate_func(&self, string: &str) -> fn() -> bool {
let mut func;
for alt in &self.alts {
return alt.func;
}
}
Run Code Online (Sandbox Code Playgroud)
将来if在for循环中会有一条语句,但是当我正在测试时,它看起来很普通,有些不合逻辑。
我认为上面的代码应该返回的指针alt.func(),该指针显然是一个指针,因为它告诉我,应该删除该行的return和分号。
fn locate_func(&self, string: &str) -> fn() -> bool {
let mut func;
for alt in &self.alts {
return alt.func;
}
}
Run Code Online (Sandbox Code Playgroud)
以上是运行时引起的错误locate_func()。由于上述代码无法正常工作,我显然缺少一些东西。有什么提示吗?
您for-loop是最后表达的函数内。编译器期望最后一个表达式的计算结果为返回类型。但是所有循环的求值为()(unit或void),因此编译器在那里有经典的类型不匹配。
要问自己的正确问题是:如果return不执行循环内部(例如,因为循环根本不执行,因为循环self.alts为空)会发生什么?这会导致问题,不是吗?
因此,您必须在-loop 之后返回一个有效的对象for才能涵盖该情况。但是,如果您确定永远不会到达循环后的位置,则可以unreachable!();告诉编译器您已经知道的内容。但是,如果程序到达此位置,则会感到恐慌!所以最好确保,您肯定知道程序的行为方式。