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()
}