E0091#
警告名:unused_errdefer
body の残りの部分がエラーを送出しないため、errdefer 文は実行されません。defer とは異なり、errdefer はエラーの送出によって制御が body を離れる場合にのみクリーンアップを実行します。
誤った例#
///|
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()
}