E0091

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