3 回答
TA贡献1890条经验 获得超9个赞
这很烦人,但是您可以通过引入内部作用域并稍微更改控制流来解决此问题:
fn f3(&mut self) {
{
if let Some(x) = self.f1() {
// ...
return;
}
}
self.f2()
}
正如评论中指出的那样,此方法无需使用大括号即可。这是因为ifor if...let表达式具有隐式范围,并且借用持续于该范围:
fn f3(&mut self) {
if let Some(x) = self.f1() {
// ...
return;
}
self.f2()
}
这是Sandeep Datta和mbrubeck之间的IRC聊天记录:
mbrubeck: std:tr :: Chars包含对创建它的字符串的借用引用。完整类型名称为Chars<'a>。因此,f1(&mut self) -> Option<Chars>不作任何省略就f1(&'a mut self) -> Option<Chars<'a>>意味着self只要从中获得的返回值f1在范围内,就保持借用状态。
Sandeep Datta:为避免出现此问题,我可以将'b用作自我,将'a用作字符吗?
mbrubeck:如果您实际上是要从中返回某个对象的迭代器,则不会self。但是,如果您可以通过&self -> Chars(而不是&mut self -> Chars)创建函数,则可以解决此问题。
- 3 回答
- 0 关注
- 486 浏览
添加回答
举报