E0091

E0091#

警告名称:unused_errdefer

errdefer 语句无法执行,因为其主体的剩余部分不可能抛出错误。与 defer 不同,errdefer 仅在控制流因抛出错误而离开主体时执行清理。

错误示例#

///|
pub fn run() -> Unit {
  errdefer println("cleanup")
  println("operation completed")
}

errdefer 后的语句会正常结束,因此其清理操作不会被使用。

修改建议#

如果不需要清理,请移除该语句。需要始终执行清理时使用 defer;仅在失败时需要清理,则将 errdefer 放在可能抛出错误的操作之前。

///|
fn operation_that_may_fail() -> Unit raise {
  fail("operation failed")
}

///|
pub fn run() -> Unit raise {
  errdefer println("cleanup")
  operation_that_may_fail()
}